SQL 查询以转置某些列
SQL query to transpose some columns
我有一个 table 这样的 3 列:
col1,col2,col3
我必须将这三列分组并计算计数。
我已经按照以下方式完成了小组:
select col5,col3,col2, count(*) from mytable group by col5,col3,col2
COL5 COL3 COL2 COUNT(*)
MOVIL A PRE 81.00
MOVIL B COM 466.00
MOVIL A COM 947.00
col2 中只有两个可能的值,分别是 PRE 和 COM
但我需要的是像下面这样的小改动:
COL5 COL3 PRE COM
MOVIL A 81 947
MOVIL B NULL 466
我认为 PIVOT 应该用于此目的。
但我不是 SQL 方面的专家。有人可以帮忙吗?
select
col5,
col3,
SUM(CASE WHEN col2='PRE' THEN count ELSE 0 END) as PRE,
SUM(CASE WHEN col2='COM' THEN count ELSE 0 END) as COM
FROM (select col5,col3,col2, count(*) as count
from mytable group by col5,col3,col2) as sub
GROUP BY col5, col3
像这样?
您可以像这样使用 PIVOT(我认为 col2 只有两个值而不是 col3):
SELECT *
FROM (select col5,col3,col2, count(*) from mytable group by col5,col3,col2)
PIVOT(MAX(CNT) FOR COL2 IN ('PRE','COM'));
使用数据透视表:
select col5 ,col3,[PRE],[COM]
from
(
select col5,col3,col2, count(*) as count
from #Mytable group by col5,col3,col2
)c
pivot
(
max(count)
FOR col2 IN ([com],[pre])
)as p
如果您有任何疑问,请告诉我。
我有一个 table 这样的 3 列: col1,col2,col3
我必须将这三列分组并计算计数。 我已经按照以下方式完成了小组:
select col5,col3,col2, count(*) from mytable group by col5,col3,col2
COL5 COL3 COL2 COUNT(*)
MOVIL A PRE 81.00
MOVIL B COM 466.00
MOVIL A COM 947.00
col2 中只有两个可能的值,分别是 PRE 和 COM 但我需要的是像下面这样的小改动:
COL5 COL3 PRE COM
MOVIL A 81 947
MOVIL B NULL 466
我认为 PIVOT 应该用于此目的。 但我不是 SQL 方面的专家。有人可以帮忙吗?
select
col5,
col3,
SUM(CASE WHEN col2='PRE' THEN count ELSE 0 END) as PRE,
SUM(CASE WHEN col2='COM' THEN count ELSE 0 END) as COM
FROM (select col5,col3,col2, count(*) as count
from mytable group by col5,col3,col2) as sub
GROUP BY col5, col3
像这样?
您可以像这样使用 PIVOT(我认为 col2 只有两个值而不是 col3):
SELECT *
FROM (select col5,col3,col2, count(*) from mytable group by col5,col3,col2)
PIVOT(MAX(CNT) FOR COL2 IN ('PRE','COM'));
使用数据透视表:
select col5 ,col3,[PRE],[COM]
from
(
select col5,col3,col2, count(*) as count
from #Mytable group by col5,col3,col2
)c
pivot
(
max(count)
FOR col2 IN ([com],[pre])
)as p
如果您有任何疑问,请告诉我。