SQL查询以显示筛选器上的所有行并删除多行

SQL查询以显示筛选器上的所有行并删除多行,sql,sql-server,select,Sql,Sql Server,Select,我有以下几行: ID fk_id type comment user ticket ----------------------------------------------------------- 000000658 135 notes afdads abas1 0000000000 000000658 999999 admin NULL 00000000

我有以下几行:

 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 who's user is 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和complaint_detail,当登录到我的页面时,我必须显示所有投诉,但只显示用户在其票号上输入的评论。为此,我创建了一个视图,其中我的查询是:select*from(


简单的答案是:

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通过参数传递)可以查看所有投诉,但只能查看自己的评论。
如果你需要更多的细节,请告诉我。

你可以试试

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

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
    )

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

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

问候


Ashutosh Arya

为什么你想要null或一个用户,而不是出于其他原因的null?你尝试了什么?听起来很简单,您的用例与“类型”字段有什么关系吗?也就是说,在某些情况下,您是否对
注释
感兴趣,在其他情况下,您是否对
管理
感兴趣?您是否从前端使用此功能?是的,我正在使用前端。它只会给出两行,其中包含您指定的两个ID,而克劳塞伊知道这一点,但这就是问题中指定的:其中ID是000000658,只有一个结果,其中user不为null,但相同的结果也应该返回ID=000000659,谁的user为null,这个问题似乎应该有更多的东西,但我不能猜测应该写什么。但是你可以在上面看到预期的ouput CONTAINS四行…我不是下一个用户你怎么知道当前用户是谁?是否有具有此值的参数?
 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
    )