Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql Server中创建透视表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

如何在sql Server中创建透视表

如何在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

我有一个表(表_标记),它包含如下所述的值:-

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 请帮助任何人

|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