SQL Query显示所有行并删除过滤器上的多行

时间:2013-08-05 05:01:07

标签: sql sql-server select

我有以下几行:

 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

我想返回ID为000000658的行,其中只有单个结果,其中user不为null,但同样的结果也应返回ID = 000000659,其用户为null,如下所示:

 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

我的情况是在仪表板上显示所有投诉,并向用户显示他们自己的评论。

我的案例是:我有两个表投诉和complaint_detail,我必须在登录到我的页面时显示所有投诉,但只向用户显示他输入的票号。为此,我查看了我的查询的位置:select * from(

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

4 个答案:

答案 0 :(得分:1)

DISTINCT将为您提供ID。 您可以尝试以下想法:

 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
    )

答案 1 :(得分: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 

根据要求,当前用户(在参数中传递的ID)可以查看所有投诉,但只能看到自己的评论。
如果您还需要更多详细信息,请告诉我们。

答案 2 :(得分:0)

你可以试试吗

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

答案 3 :(得分:0)

我认为您需要的是roqw级别访问权限,这可以通过以下方式获得。 如果您从前端使用它,那么您必须要求用户登录。我所说的是您有用户名。 那么你需要确定哪些记录将从特定用户访问。 您可以包含两列。在特定行和其他用户的权限上定义该用户的权限。 用户不是当前用户且注释为空的所有记录都可用于每个记录。 AND注释不为null,仅适用于该用户。

这需要更复杂的工作,我试图给你一个想法。如果需要更多详细信息,请更新我。

此致

Ashutosh Arya