tsql-sql服务器
我正在根据非常具体的要求编写一份报告。我试图将一个键id的倍数合并到一行中,但是在某些列中有不同的值,所以groupby不起作用。
SELECT count(tt.Person_ID) as CandCount, tt.Person_ID,
CASE e.EthnicSuperCategoryID WHEN CandCount > 1 THEN 10 ELSE e.EthnicSuperCategoryID END as EthnicSuperCategoryID,
CASE e.Ethnicity_Id WHEN 1 THEN 1 ELSE 0 END as Black ,
CASE e.Ethnicity_Id WHEN 2 THEN 1 ELSE 0 END as White ,
CASE e.Ethnicity_Id WHEN 3 THEN 1 ELSE 0 END as Asian,
etc
FROM T_1 TT
JOINS
WHERE
GROUP
消息102,级别15,状态1,第4行“>”附近语法不正确。
以下是结果(没有第一个案例)。注:第三人称有多种种族。
SELECT count(tt.Person_ID) as CandCount, tt.Person_ID,
CASE e.Ethnicity_Id WHEN 1 THEN 1 ELSE 0 END as Black ,
CASE e.Ethnicity_Id WHEN 2 THEN 1 ELSE 0 END as White ,
CASE e.Ethnicity_Id WHEN 3 THEN 1 ELSE 0 END as Asian,
etc
FROM T_1 TT
JOINS
WHERE
GROUP
这是意料之中的,但目标是将多个种族分配给10(多个)的种族id。我还想把它们放在一条线上。
最终结果如下:
所以我的问题有两个。如果候选人有两个以上的种族,则将记录分配到10的种族。我还需要将重复的personid分组到一行中,同时显示列的所有结果。
3条答案
按热度按时间0aydgbwb1#
这将带来您想要的结果:
k0pti3hp2#
您需要条件聚合。您的查询不完整,但想法是:
你可能想要
max()
而不是sum()
. 我也没有得到期望结果中第二列的逻辑-也许这只是count(*)
.ohtdti5x3#
这就是我的方法
将id列透视成多个列,使用常量1使其与预期结果一致。
使用max(种族标识)和partition by来获取原始种族标识
使用count(种族标识)标记是否需要替换种族标识
对于10 bc,该个人id的行数超过1行
如果您需要添加更多的种族,请在中添加ID
... IN ([1], [2], [3]) ...
在选择