下午好,
我试图在这个问题中使用CASE将行转换为列:
Rows to columns SQL Server query
但是在我的情况下,我没有包含信息的列,这是一个数据计数。
我使用此查询获取数据:
select MA, SN, count(*)
from Original
where MA = 'AB'
group by MA
查询结果:
MA SN COUNT
AB TEXTA 6
AB TEXTB 5
AB TEXTC 3
AB TEXTD 4
表原文
MA SN
AB TEXTA
AB TEXTA
AB TEXTA
AB TEXTA
AB TEXTA
AB TEXTA
.
.
.
AB TEXTD
AB TEXTD
表结果:
MA TEXTA TEXTB TEXTC TEXTD
AB 6 5 3 4
这是我目前的疑问:
select MA,
count(*) as 'COUNT2',
MAX(CASE WHEN SN = 'TEXTA' THEN COUNT2 end) as TEXTA1,
MAX(CASE WHEN SN = 'TEXTB' THEN COUNT2 end) as TEXTB1,
MAX(CASE WHEN SN = 'TEXTC' THEN COUNT2 end) as TEXTC1,
MAX(CASE WHEN SN = 'TEXTD' THEN COUNT2 end) as TEXTD1,
from Original
where MA= 'AB'
group by MA
我在查询中做错了什么?并且有人可以解释为什么我发布的问题有效,但没有计数吗?谢谢! :)。
答案 0 :(得分:4)
编辑:您无法按照预期的方式使用COUNT2
,因为选择列表中的后续列不能引用先前列的别名。因此COUNT2
在查询中的任何其他位置都没有意义,除非您将该部分转换为子查询(或cte)然后引用它。
因此,使用更新的架构,您需要子查询来执行计数。基本上将您的第一个查询作为子查询删除到第二个查询(替换Original
),然后添加一些缺少group by
列,然后它可以工作:
select MA,
MAX(CASE WHEN SN = 'TEXTA' THEN COUNT2 end) as TEXTA1,
MAX(CASE WHEN SN = 'TEXTB' THEN COUNT2 end) as TEXTB1,
MAX(CASE WHEN SN = 'TEXTC' THEN COUNT2 end) as TEXTC1,
MAX(CASE WHEN SN = 'TEXTD' THEN COUNT2 end) as TEXTD1
from (
select MA, SN, count(*) as COUNT2
from Original
where MA = 'AB'
group by MA, SN
) Original
where MA= 'AB'
group by MA