rat*_*lko 7 t-sql sql-server sql-server-2012
我想从下面的图像创建以下输出:
输入数据来自视图(Select * from test).我们的目标是让这里的所有数据progress列包含文本tbd和counter数字为1.
在声明的情况下可以解决这个问题吗?
由于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')
Run Code Online (Sandbox Code Playgroud)
我无法让它发挥作用.
希望你能帮助我.
非常感谢.
使用Exists子句你可以达到你想要的结果。
询问
SELECT
*
FROM test t
WHERE EXISTS (SELECT 1 FROM test
WHERE t.ID = ID
AND progress = 'tbd'
AND counter = 1)
Run Code Online (Sandbox Code Playgroud)
结果
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
Run Code Online (Sandbox Code Playgroud)
另一种替代解决方案很简单,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
Run Code Online (Sandbox Code Playgroud)
上面的查询返回相同的结果。