如果有人可以更新标题以更好地反映我的问题,将不胜感激。我认为我一直在努力寻找答案,因为我不知道正确的搜索词。
如果我在表中具有以下值:
TableID TableSensitivity ----------------------------- 1 aSensitivity 1 aRevision 2 bRevision 3 cRevision 3 cSensitivity
如何为每个TableID过滤仅包含
的“修订”值? 已经是一个包含“灵敏度”的值。这是预期的输出: TableID TableSensitivity ----------------------------- 1 aSensitivity 2 bRevision 3 cSensitivity
这是一个示例设置:
DECLARE @Example TABLE (TableID INT, TableSensitivity VARCHAR(200))
INSERT INTO @Example(TableID, TableSensitivity) VALUES (1, 'aSensitivity')
INSERT INTO @Example(TableID, TableSensitivity) VALUES (1, 'aRevision')
INSERT INTO @Example(TableID, TableSensitivity) VALUES (2, 'bRevision')
INSERT INTO @Example(TableID, TableSensitivity) VALUES (3, 'cSensitivity')
INSERT INTO @Example(TableID, TableSensitivity) VALUES (3, 'cRevision')
我尝试使用CASE来确定具有敏感性的行,并发现我可以使用MAX进行过滤,但无法使其起作用:
SELECT TableID
, TableSensitivity
, CASE WHEN TableSensitivity LIKE '%Sensitivity' THEN 1 ELSE 0 END 'SomeKey'
FROM @Example
答案 0 :(得分:3)
您可以使用WHERE NOT EXISTS
SELECT TableID
, TableSensitivity
FROM @Example e1
WHERE NOT EXISTS
(
SELECT *
FROM @Example e2
WHERE e1.TableID=e2.TableID
AND e2.TableSensitivity LIKE '%Sensitivity'
AND e1.TableSensitivity LIKE '%Revision'
)
答案 1 :(得分:2)
这将摆脱@Example
中的行并返回您的预期结果。可以根据需要对其进行修改并应用于您的查询中:
DELETE
FROM @Example
WHERE TableID IN
(
SELECT TableID
FROM @Example
WHERE TableSensitivity LIKE '%Sensitivity%'
)
AND TableSensitivity LIKE '%Revision%'
SELECT *
FROM @Example
答案 2 :(得分:1)
这也可以使用FIRST_VALUE函数(对于SQL Server 2012及更高版本)实现
SELECT DISTINCT
TableID,
FIRST_VALUE(TableSensitivity) OVER (PARTITION BY TableID ORDER BY
CASE WHEN TableSensitivity LIKE '%Sensitivity' THEN 1
WHEN TableSensitivity LIKE '%Revision' THEN 2
ELSE 3 END) as TableSensitivity
FROM @Example
答案 3 :(得分:0)
最初,我完全误解了这个问题。我知道,您需要一个优先级查询。一种简单的方法是:
$a.model.dataSources.type
更通用的方法是使用select e.*
from @example e
where e.TableSensitivity like '%Sensitivity'
union all
select e.*
from @example e
where e.TableSensitivity like '%Revision' and
not exists (select 1
from @example e2
where e2.tableId = e.tableId and
e2.TableSensitivity like '%Sensitivity'
);
:
row_number()