SQL两级分组查询问题 ( 积分: 200 )

  • 主题发起人 主题发起人 小虾米爱吃鱼
  • 开始时间 开始时间

小虾米爱吃鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表: TS
其中字段:N:姓名,K:课程,C:成绩
数据: ‘N1’ ‘K1’ 'A'
‘N2’ ‘K1’ 'A'
‘N3’ ‘K1’ 'B'
‘N1’ ‘K2’ 'A'
‘N2’ ‘K2’ 'C'
‘N3’ ‘K2’ 'B'
‘N1’ ‘K3’ 'C'
‘N2’ ‘K3’ 'A'
‘N3’ ‘K3’ 'D'
‘N1’ ‘K4’ 'B'
‘N2’ ‘K4’ 'A'
‘N3’ ‘K4’ 'C'
我要的结果是:分组统计出各课程,各成绩段的人数
如:
A: B: C: D:
K1: 2 1 0 0
K2: 1 1 1 0
K3: 1 0 1 1
K4: 1 1 1 0

请问高手,这样的SQL语句如何实现?
 
贴一段,旧帖,按你的改一下可以了。
//////////////////行列旋转(定列)
USE Northwind
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO

--下面是用于创建旋转结果的 SELECT 语句:

SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
 
select K,sum(case when C='A' then 1 else 0 end) as A,
sum(case when C='B' then 1 else 0 end)as B,
sum(case when C='C' then 1 else 0 end)as C,
sum(case when C='D' then 1 else 0 end)as D
From Table1 Group By K Order By K
 
select k,count(if(c='a',c,null)) as 'a',count(if(c='b',c,null)) as 'b',count(if(c='c',c,null)) as 'c',count(if(c='d',c,null)) as 'd' from ts group by k
好象有的SQl版本中的判断语句是iif(*,*,*)
 
那如果C中的字段值是动态改变的呢?不是说就一定是“A”“B”“C”“D”
 
如果还有 E,F,G,H,I,J,K........这样的很多值,那你需要现查询出所有的值
select distinct c from table1 order by c
然后取出c值,动态生成sql语句
最后exec 你的sql语句即可
 
OK,我想也只有这样了!呵呵,谢谢各位。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
699
import
I
后退
顶部