我想从下图创建以下输出:
输入数据来自 View (Select * from test
)。目标是获取 progress
列包含文本 tbd
且 counter
数字为 1 的所有数据。
可以用 case when 语句解决这个问题吗?
由于 sqlfiddle 不起作用,这里的架构是:
CREATE TABLE test
(
[ID] [int] NOT NULL,
[Counter] [int] NOT NULL,
[Name] nvarchar(200) NULL,
[Progress] nvarchar(200) NOT NULL
)
INSERT INTO test
VALUES (1, 1, 'userA', 'tbd'),
(1, 2, 'userB', 'done'),
(1, 3, 'userC', 'tbd'),
(2, 1, 'userB', 'done'),
(2, 5, 'userA', 'tbd'),
(3, 1, 'userD', 'tbd'),
(3, 2, 'userA', 'done'),
(3, 7, 'userC', 'tbd'),
(3, 11, 'userB', 'tbd')
我无法让它工作。
希望你能帮助我。
非常感谢。
最佳答案
使用Exists
子句可以达到您想要的结果。
查询
SELECT
*
FROM test t
WHERE EXISTS (SELECT 1 FROM test
WHERE t.ID = ID
AND progress = 'tbd'
AND counter = 1)
结果
ID Counter Name Progress
-----------------------------
1 1 userA tbd
1 2 userB done
1 3 userC tbd
3 1 userD tbd
3 2 userA done
3 7 userC tbd
3 11 userB tbd
另一个替代解决方案是简单的SELF JOIN
,就像这样-
查询
SELECT
le.ID, le.Counter, le.Name, le.Progress
FROM test le
INNER JOIN test re ON le.ID = re.ID
WHERE re.progress = 'tbd'
AND re.counter = 1
以上查询返回相同的结果。
关于sql-server - T-SQL - 基于两列获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35888621/