use*_*540 3 sql t-sql sql-server
我正在尝试做类似的事(当然是假的):
SELECT
city,
CASE WHEN COUNT( [group] ) > 1 THEN 'Multiple' ELSE [group] END AS Type
FROM
offices
GROUP BY
city
Run Code Online (Sandbox Code Playgroud)
办公室包含以下行:
ID | group | city
----------------------
1 | 'A' | 'Houston'
2 | 'B' | 'Houston'
3 | 'C' | 'Houston'
4 | 'S' | 'Boston'
5 | 'R' | 'Detroit'
Run Code Online (Sandbox Code Playgroud)
结果看起来像:
city | group
--------------------
'Houston'| 'Multiple'
'Boston' | 'S'
'Detroit'| 'R'
Run Code Online (Sandbox Code Playgroud)
我知道你可以这样做:
SELECT
City,
CASE WHEN COUNT([group]) > 1 THEN
'Multiple'
ELSE
( SELECT [group] FROM test WHERE t.City = city )
END AS CGroup
FROM
test t
GROUP BY
City
Run Code Online (Sandbox Code Playgroud)
我认为这应该更简单.
没有子查询的东西?
你可以找到MIN和MAX列,然后采取行动,如果他们不相同:
declare @t table (ID int not null,[group] char(1) not null,city varchar(20) not null)
insert into @t(ID,[group],city) values
(1,'A','Houston'),
(2,'B','Houston'),
(3,'C','Houston'),
(4,'S','Boston' ),
(5,'R','Detroit')
select city,
CASE
WHEN MIN([group]) != MAX([group]) THEN 'Multiple'
ELSE MAX([group]) END as [group]
from @t
group by city
Run Code Online (Sandbox Code Playgroud)
尽管服务器MAX在select子句中出现两次,但服务器应该足够智能,只能实际运行一次聚合.
结果:
city group
-------------------- --------
Boston S
Detroit R
Houston Multiple
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |