我有以下几行:
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
答案 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