SQL-对每组项目执行操作
例如,我有一张桌子SQL-对每组项目执行操作,sql,sql-server,group-by,grouping,Sql,Sql Server,Group By,Grouping,例如,我有一张桌子 | ID | Key | Value | -------------------- | 1 | a | 123 | | 2 | b | 354 | | 3 | c | 980 | | 4 | b | 354 | | 5 | a | 123 | 我想得到键和值相等的组。就这样吧 | 1 | a | 123 | | 5 | a | 123 | -------------------- | 2 | b |
| ID | Key | Value |
--------------------
| 1 | a | 123 |
| 2 | b | 354 |
| 3 | c | 980 |
| 4 | b | 354 |
| 5 | a | 123 |
我想得到键
和值
相等的组。就这样吧
| 1 | a | 123 |
| 5 | a | 123 |
--------------------
| 2 | b | 354 |
| 4 | b | 354 |
--------------------
| 3 | c | 980 |
然后,我要为每个小组做一些动作。类似于为每个ID
检查另一个表中的一些值,并设置一些标志
我认为,groupby
在这里很有用,但我不知道如何实现我想要的
编辑
如果你需要一个动作的例子
假设我有另一个表,ID
是外键
| ID | Name | Address | IsActive |
对于每个组,我要检查该组中是否有任何项目有地址,并将该组中所有其他项目的IsActive
设置为false
。检查该部分。这似乎有效
CREATE TABLE #TEMP
(ID INT, [KEY] NVARCHAR(10), VALUE INT)
INSERT INTO #TEMP VALUES ('1', 'A', '123'),
( '2', 'b', '354'),
( '3', 'c', '980'),
('4', 'b', '354'),
('5', 'a', '123')
SELECT ID, [KEY], VALUE
FROM #TEMP
GROUP BY [KEY], VALUE, ID
这就实现了分组。要执行操作,需要在检查要加入的表时实现一个CASE
CREATE TABLE #ADDRESS
([ADDRESS] NVARCHAR(25), ID INT)
INSERT INTO #ADDRESS VALUES ('123 MAIN ST', '1')
SELECT A.ID, A.[KEY], A.VALUE,
CASE WHEN B.[ADDRESS] IS NOT NULL THEN 'ACTIVE' ELSE 'INACTIVE' END AS 'ACTIVE?'
FROM #TEMP A
LEFT JOIN #ADDRESS B
ON A.ID = B.ID
GROUP BY A.[KEY], A.VALUE, A.ID, B.[ADDRESS]
然后,对于我想要执行的每个组,您必须更具体。您应该注意,因为您的外键是ID,所以您没有检查组是否有地址,而是检查ID是否有地址。如果您想检查组是否有地址,您的地址表中必须有“键”和“值”字段,以便加入它们。如果这回答了您的问题,请让我知道。谢谢您的回答。我稍后再试试,现在不行。还有什么方法可以在“地址”表中不包含“键”和“值”字段的情况下执行此操作?请尝试我的建议,看看它是否会产生所需的结果。如果没有,请发布您的输出,我将帮助您解决问题。此外,您上面的输出不正确,因为值字段中没有“980”。修复了带有“980”的字段