0

例如我有一张桌子

| ID | Key | Value |
--------------------
| 1  | a   | 123   |
| 2  | b   | 354   |
| 3  | c   | 980   |
| 4  | b   | 354   |
| 5  | a   | 123   |

我想获得Key平等的群体Value。所以会是

| 1  | a   | 123   |
| 5  | a   | 123   |
--------------------
| 2  | b   | 354   |
| 4  | b   | 354   |
--------------------
| 3  | c   | 980   |

然后对于每个组,我想执行一些操作。像在另一个表中为每个值检查一些值ID并设置一些标志......

我认为GROUP BY在这里会有用,但我不知道如何实现我想要的。

编辑

如果你需要一个动作的例子......

假设我有另一个表,其中ID有一个外键。

| ID | Name | Address | IsActive |

对于每个组,我想检查该组中的任何项目是否有地址,并设置IsActive为该false组中的所有其他项目。

4

2 回答 2

0

检查“按多列分组”部分。

于 2013-11-05T13:25:40.860 回答
0

这似乎有效。

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 WHEN 来检查您要加入的表。

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]
于 2013-11-05T13:27:14.677 回答