我试图找出如何编写一个sql查询代码,该查询将标识一个表中的一个组,该表在多个列上的组中的记录中包含相同的值。
例如,给定以下示例表:
我希望在本案中找出所有审判都有相同起点和终点的人的名字。根据数据,只有詹姆斯和弗兰克符合这个标准。我不想过滤和获取查询输出,只是给我所有的组与“是”或“否”。我确实希望查询输出整个表,并适当地标记组。怎么办?
下面是我能看到的。我确实看到,当我分组时,在感兴趣的列中显示所有相同值的组会折叠成一个组。但是如果我加入一个新的组,其中有多个行(试验),其中每个试验可能有相同的起点和终点,但该组的不同试验不是相同的点,那么实际上该组应该产生“否”,即使每个单独的试验显示相同的起点和终点。
CREATE TABLE Trial
(Name nvarchar(100),
Trial nvarchar(10),
Start nvarchar(100),
[End] nvarchar(100))
INSERT INTO Trial
VALUES
('Julie', 'A', 'Ranch St', 'Ranch St'),
('Julie', 'B', 'Ranch St', 'North Blvd'),
('James', 'A', 'Deer Rd', 'Deer Rd'),
('James', 'B', 'Deer Rd', 'Deer Rd'),
('Emily', 'A', 'Oak St', 'Oak St'),
('Emily', 'B', 'Oak St', 'Elm Rd'),
('Frank', 'A', 'Main Ave', 'Main Ave'),
('Frank', 'B', 'Main Ave', 'Main Ave'),
('Frank', 'C', 'Main Ave', 'Main Ave'),
('Jeff', 'A', 'Main Ave', 'Main Ave'),
('Jeff', 'B', 'Oak St', 'Oak St')
SELECT
a.[Name]
,CASE
WHEN a.[Start] = a.[END] THEN 'Yes' ELSE 'No'
END AS 'TrialChk'
FROM Trial AS a
GROUP BY a.[Name]
,a.[Start]
,a.[End]
ORDER BY Name ASC;
我在上面的示例表中没有jeff试验,但是jeff会对每个试验都给出“是”,但是由于所有的点都不相同,所以组的输出应该是“否”。
4条答案
按热度按时间neekobn81#
简单使用
case
具有窗口功能:这是一把小提琴。
注:
end
是一个非常糟糕的列名称,因为它是一个sql关键字。jk9hmnmh2#
你可以试试窗口功能
Row_Number()
如下图所示:现场演示
y4ekin9u3#
检查给定的查询
w41d8nur4#
如果你
GROUP BY Name
数一数Start
s和End
s、 就像这个查询一样:你会得到这些结果:
因此,您可以将上述查询连接到表并设置
'Yes'
其中2个计数器都等于1,否则设置'No'
:请看演示。
结果: