如何在sql Server中创建透视表
我有一个表(表_标记),它包含如下所述的值:- CLASS | STD | NAME | SUBJECT | PT1_M | PTB1_M | PT2_M | PTB2_M | 1 | ST1 | NITYA | ENG | 12 | 15 | 30 | 9 | 1 | ST1 | NITYA | HIN | 2 | 22 | 25 | 6 | 1 | ST1 | NITYA | MATH | 3 | 10 | 32 | 8 | 1 | ST2 | SHIV | ENG | AB | AB | 10 | 2 | 1 | ST2 | SHIV | HIN | 2 | 22 | 20 | 1 | 1 | ST2 | SHIV | MATH | 3 | 10 | AB | 5 | CLASS|STD |NAME |ENG |HIN |MATH |T1 |ENG |HIN |MATH |T2 |T1+T2| |PT1|PB1 |PT1|PB1|PT1|PB1| |PT2|PB2|PT2|PB2|PT2|PB2| 1 |STD1|NITYA |12 |15 |2 |22 |3 |10 |64 |30 |9 |25 |6 |32 |8 |110 |174 1 |STD2|SHIV |AB |AB |2 |22 |3 |10 |37 |10 |2 |20 |1 |AB |5 |38 |75 类别|标准|名称|科目| PT1 | PTM | PTB1 | PT2 | PTB2 | 1 | ST1 | NITYA | ENG | 12 | 15 | 30 | 9| 1 | ST1 | NITYA | HIN | 2 | 22 | 25 | 6| 1 | ST1 | NITYA |数学| 3 | 10 | 32 | 8| 1 | ST2 | SHIV | ENG | AB | AB | 10 | 2| 1 | ST2 | SHIV | HIN | 2 | 22 | 20 | 1| 1 | ST2 | SHIV | MATH | 3 | 10 | AB | 5| 现在我想将其用作透视表,如下所述:- CLASS | STD | NAME | SUBJECT | PT1_M | PTB1_M | PT2_M | PTB2_M | 1 | ST1 | NITYA | ENG | 12 | 15 | 30 | 9 | 1 | ST1 | NITYA | HIN | 2 | 22 | 25 | 6 | 1 | ST1 | NITYA | MATH | 3 | 10 | 32 | 8 | 1 | ST2 | SHIV | ENG | AB | AB | 10 | 2 | 1 | ST2 | SHIV | HIN | 2 | 22 | 20 | 1 | 1 | ST2 | SHIV | MATH | 3 | 10 | AB | 5 | CLASS|STD |NAME |ENG |HIN |MATH |T1 |ENG |HIN |MATH |T2 |T1+T2| |PT1|PB1 |PT1|PB1|PT1|PB1| |PT2|PB2|PT2|PB2|PT2|PB2| 1 |STD1|NITYA |12 |15 |2 |22 |3 |10 |64 |30 |9 |25 |6 |32 |8 |110 |174 1 |STD2|SHIV |AB |AB |2 |22 |3 |10 |37 |10 |2 |20 |1 |AB |5 |38 |75 班级|标准|名称|英语|欣|数学| T1 |英语|欣|数学| T2 | T1+T2| |PT1 | PB1 | PT1 | PB1 | PT1 | PB1 | PT2 | PB2 | PT2 | PB2 | 1 | STD1 | NITYA | 12 | 15 | 2 | 22 | 3 | 10 | 64 | 30 | 9 | 25 | 6 | 32 | 8 | 110 | 174 1 | STD2 | SHIV | AB | AB | 2 | 22 | 3 | 10 | 37 | 10 | 2 | 20 | 1 | AB | 5 | 38 | 75 请帮助任何人如何在sql Server中创建透视表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表(表_标记),它包含如下所述的值:- CLASS | STD | NAME | SUBJECT | PT1_M | PTB1_M | PT2_M | PTB2_M | 1 | ST1 | NITYA | ENG | 12 | 15 | 30 | 9 | 1 | ST1 | NITYA | HIN | 2 | 22 | 25 | 6 | 1 | ST1 | NITYA | M
|ENG |HIN |MATH |T1 |ENG |HIN |MATH |T2 |T1+T2|
|PT1|PB1 |PT1|PB1|PT1|PB1| |PT2|PB2|PT2|PB2|PT2|PB2|
上述列在Cassandra中称为超级列/超级列族。如果我没说错,SQL Server 2008或大多数关系数据库中都不存在超级列。根据需要更改别名:
create TABLE student_marks
(
CLASS int,
standard varchar(100),
name char(20),
SUBJECT char(20),
PT1_M int,
PTB1_M int,
PT2_M int,
PTB2_M int
);
insert into student_marks values (1,'ST1','NITYA','ENG', 12,15,30,9);
insert into student_marks values (1,'ST1','NITYA','HIN', 16,18,31,8) ;
解决方案:
SELECT
CLASS,
STANDARD,
NAME,
SUBJECT,
PT1,
PB1,
(PT1+PB1) AS T1,
PT2,
PB2,
(PT2+PB2) AS T2,
(PT1+PB1+PT2+PB2) AS T1T2
FROM(
SELECT
CLASS,
STANDARD,
NAME,
SUBJECT,
CASE WHEN SUBJECT in ('ENG','HIN') THEN PT1_M ELSE 0 END AS PT1,
CASE WHEN SUBJECT in ('ENG','HIN') THEN PTB1_M ELSE 0 END AS PB1,
CASE WHEN SUBJECT in ('ENG','HIN') THEN PT2_M ELSE 0 END AS PT2,
CASE WHEN SUBJECT in ('ENG','HIN') THEN PTB2_M ELSE 0 END AS PB2
FROM STUDENT_MARKS
)
C
向我们展示您迄今为止所做的尝试| E|PT1 | E|u PB1 | H|u PT1 | M|u PB1 | E|u PT2 | H|u PT2 | H|u PB2 | M|PT2 | M| u PB2 |最后t1+t2