2013-08-05 1 views
0

у меня есть следующие строки:SQL Query, чтобы показать все строки и удалить несколько строк на фильтре

ID    fk_id  type comment user ticket 
----------------------------------------------------------- 
000000658  135   notes afdads abas1 0000000000 
000000658  999999  admin   NULL 0000000000 
000000659  136   notes afadsf admin 0000000001 
000000659  999999  admin   NULL 0000000001 
000000660  999999  admin   NULL 0000000000 
000000661  999999  admin   NULL 0000000006 

Я хочу, чтобы вернуть строку, в которой идентификатор 000000658 только одного результата, где пользователь не является нулевым, но то же самое результат должен также вернуть ID = 000000659, кто пользователь является пустым, как показано ниже:

ID    fk_id  type comment user ticket 
----------------------------------------------------------- 
000000658  135   notes fdads abas1 0000000000 
000000659  999999  admin   NULL 0000000001 
000000660  999999  admin   NULL 0000000000 
000000661  999999  admin   NULL 0000000006 

Мой случай показать все жалобы на приборной панели и показывают пользователям свой собственный комментарий.

МОЙ случай: у меня есть две жалобы на жалобу и жалоба, и я должен показать все жалобы, чтобы войти на мою страницу, но показывать только комментарии пользователю, что он входит в свой билет. для этого я делаю вид, где мой запрос: выберите * из (

SELECT 
      COMPLAINT.COMP_TICKET_NUM, 
      999999 COMPLAINT_DETAIL_ID , 
      'admin' FLAG,--TO be discuss 
      ' ' NOTES, 
      null LOGIN_USER, 
      CURRENT_STATE, CURRENT_ACTOR,CALCULATED_ACTOR,CURRENT_ORG_UNIT--, 
      --TEMP_FLAG 
FROM   dbo.COMPLAINT 
left outer join COMPLAINT_DETAIL on COMPLAINT_DETAIL.COMP_TICKET_NUM = COMPLAINT.COMP_TICKET_NUM 
--where COMPLAINT_DETAIL.LOGIN_USER in ('admin') 
union 
SELECT 
      COMPLAINT.COMP_TICKET_NUM, 
      COMPLAINT_DETAIL.COMPLAINT_DETAIL_ID, 
      isnull(COMPLAINT_DETAIL.FLAG,'admin') FLAG,--TO be discuss 
      COMPLAINT_DETAIL.NOTES, 
      COMPLAINT_DETAIL.LOGIN_USER, 

     CURRENT_STATE, CURRENT_ACTOR,CALCULATED_ACTOR,CURRENT_ORG_UNIT--, 
      --TEMP_FLAG 
FROM   dbo.COMPLAINT 

inner join COMPLAINT_DETAIL 
on COMPLAINT_DETAIL.COMP_TICKET_NUM =COMPLAINT.COMP_TICKET_NUM 
+1

почему и хочет нуль или один пользователь и не нулевые для другой какой-либо причины? –

+1

Что вы пробовали? Это звучит так же просто WHERE (condition1 и condition2) –

+0

У ваших случаев использования есть что-то общее с полем типа? То есть вас интересуют «примечания» в некоторых случаях и «admin» в других? – PaulProgrammer

ответ

0

Простой ответ заключается в следующем:

SELECT * 
FROM TABLE1 
WHERE (ID = '000000658' 
     AND USER IS NOT NULL) 
     OR (ID = '000000659' 
      AND USER IS NULL) 

Но у меня есть ощущение, что вы хотите что-то более сложное
Просто дайте. я знаю, что еще вы хотите, и я добавлю его :-)

Редактировать После некоторых уточнений, здесь лучшее решение:

DECLARE @curr_user VARCHAR(20) = '000000658' 

SELECT ID, 
     FK_ID, 
     TYPE, 
     CASE 
     WHEN @curr_user = USER THEN COMMENT 
     ELSE '' 
     END comment, 
     USER, 
     TICKET 
FROM TABLE1 

В соответствии с запросом текущий пользователь (идентификатор которого передается в параметре) может видеть все жалобы, но может видеть только свои комментарии.
Если вам нужна дополнительная информация, связанная с этим, просто дайте мне знать.

+0

он даст только две строки с двумя идентификаторами, которые указаны в вас, где статья –

+0

. Я знаю об этом, но это то, что было указано в вопросе: где ID - 000000658, только один результат, где пользователь не равен нулю , но тот же результат должен также вернуть ID = 000000659, у которого есть значение null. – Gidil

+0

Как я писал, кажется, что в этом вопросе должно быть что-то еще, но я не могу просто догадаться, что должно было быть написано. – Gidil

0

U можно попробовать его

Select * From TableName Where User='abas1' or User is null 
1

DISTINCT даст вам идентификаторы. Вот идея, вы можете попробовать:

SELECT DISTINCT(ID), othercolumns 
    FROM 
    (
     SELECT DISTINCT(ID), othercolumns 
     FROM TABLE_NAME 
     WHERE user IS NOT NULL -- All distinct ids where user not null 
     UNION 
     SELECT DISTINCT(ID), othercolumns 
     FROM TABLE_NAME 
     WHERE user IS NULL -- All distinct ids where user IS null 
    ) 
0

Я думаю, что вам нужно, это доступ roqw уровня, это может быть achived, как показано ниже. ЕСЛИ вы используете его с лицевой стороны, тогда вы должны просить пользователя войти в систему. Я говорю, что у вас есть имя пользователя. . Тогда вам нужно определить, к какой записи будет обращаться от пользователя в обычном режиме. Вы можете включить два столбца. Определение прав этого пользователя на строчку и права других пользователей. Все те записи, в которых пользователь не является текущим пользователем, и комментарий являются нулевыми, доступны для каждого. И где комментарий не равен null, он доступен только для этого пользователя.

Для этого требуется более сложная работа, я пытаюсь дать вам представление. пожалуйста, уточните меня, если потребуется более подробная информация.

С уважением

Ашутош Arya