我有一个StudentMarks带有列的表Name, Maths, Science, English.数据就像
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Run Code Online (Sandbox Code Playgroud)
我希望得到如下安排:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Run Code Online (Sandbox Code Playgroud)
使用unpivot,我可以正确获取Name,Marks,但无法将源表中的列名称获取到Subject所需结果集中的列.
我怎样才能做到这一点?
我到目前为止已达到以下查询(获取名称,标记)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
Run Code Online (Sandbox Code Playgroud) 寻找优雅(或任何)解决方案将列转换为行.
这是一个例子:我有一个包含以下模式的表:
[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
Run Code Online (Sandbox Code Playgroud)
以下是我想得到的结果:
[ID] [EntityId] [IndicatorName] [IndicatorValue]
Run Code Online (Sandbox Code Playgroud)
结果值将是:
1 1 'Indicator1' 'Value of Indicator 1 for entity 1'
2 1 'Indicator2' 'Value of Indicator 2 for entity 1'
3 1 'Indicator3' 'Value of Indicator 3 for entity 1'
4 2 'Indicator1' 'Value of Indicator 1 for entity 2'
Run Code Online (Sandbox Code Playgroud)
等等..
这有意义吗?您对在T-SQL中查看的位置以及如何完成它有什么建议吗?
我需要FIRST在表格中转换Excel矩阵LATER:
第一:
P1 P2 P3 P4
F1 X
F2 X X
F3 X X
F4 X X
Run Code Online (Sandbox Code Playgroud)
稍后:
F P VALUE
F1 P1 X
F1 P2
F1 P3
F1 P4
F2 P1 X
F2 P2 X
F2 P3
F2 P4
F3 P1
F3 P2 X
F3 P3
F3 P4 X
F4 P1
F4 P2 X
F4 P3 X
F4 P4
Run Code Online (Sandbox Code Playgroud) 我有一张桌子:
create table mytransactions(country varchar(30), totalcount int, numericmonth int, chardate char(20), totalamount money)
Run Code Online (Sandbox Code Playgroud)
该表有以下记录:
insert into mytransactions(country, totalcount, numericmonth, chardate, totalamount) values('Australia', 36, 7, 'Jul-12', 699.96)
Go
insert into mytransactions(country, totalcount, numericmonth, chardate, totalamount) values('Australia', 44, 8, 'Aug-12', 1368.71)
Go
insert into mytransactions(country, totalcount, numericmonth, chardate, totalamount) values('Australia', 52, 9, 'Sep-12', 1161.33)
Go
insert into mytransactions(country, totalcount, numericmonth, chardate, totalamount) values('Australia', 50, 10, 'Oct-12', 1099.84)
Go
insert into mytransactions(country, totalcount, numericmonth, chardate, totalamount) values('Australia', 38, 11, 'Nov-12', 1078.94)
Go
insert …Run Code Online (Sandbox Code Playgroud) UNPIVOT不会返回NULL,但我在比较查询中需要它们.我试图避免使用ISNULL以下示例(因为在真正的sql中有超过100个字段:
Select ID, theValue, column_name
From
(select ID,
ISNULL(CAST([TheColumnToCompare] AS VarChar(1000)), '') as TheColumnToCompare
from MyView
where The_Date = '04/30/2009'
) MA
UNPIVOT
(theValue FOR column_name IN
([TheColumnToCompare])
) AS unpvt
Run Code Online (Sandbox Code Playgroud)
任何替代品?
我有一张这样的桌子
+---+-----+----+----+----+----+
|id |month|col1|col2|col3|col4|
+---+-----+----+----+----+----+
|101|Jan |A |B |NULL|B |
+---+-----+----+----+----+----+
|102|feb |C |A |G |E |
+---+-----+----+----+----+----+
Run Code Online (Sandbox Code Playgroud)
然后我想创建这样的报告
+----+---+---+
|desc|jan|feb|
+----+---+---+
|col1|A |C |
+----+---+---+
|col2|B |A |
+----+---+---+
|col3|0 |G |
+----+---+---+
|Col4|B |E |
+----+---+---+
Run Code Online (Sandbox Code Playgroud)
有人能帮忙吗?
我需要在MS SQL中进行以下转置
从:
Day A B
---------
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0
Run Code Online (Sandbox Code Playgroud)
以下内容:
Value Mon Tue Wed Thu Fri
--------------------------
A 1 3 5 7 9
B 2 4 6 8 0
Run Code Online (Sandbox Code Playgroud)
我知道PIVOT当只有一列(A)时怎么做,但是当有多列要转置时我无法弄清楚怎么做(A,B,...)
要转置的示例代码:
select LEFT(datename(dw,datetime),3) as DateWeek,
sum(ACalls) as A,
Sum(BCalls) as B
from DataTable
group by LEFT(datename(dw,datetime),3)
Run Code Online (Sandbox Code Playgroud)
表结构:
Column DataType
DateTime Datetime
ACalls int
BCalls int
Run Code Online (Sandbox Code Playgroud)
任何帮助都感激不尽.
我现在可能没有看清楚事情,但我在MySQL中有一个表,如下所示:
ID | a | b | c
1 | a1 | b1 | c1
2 | a2 | b2 | c2
Run Code Online (Sandbox Code Playgroud)
出于某种原因(实际上是在另一个表上加入 - 基于ID,但我想如果有人可以帮我解决这个问题,我可以自己做其余的事情),我需要那些行代替:
1 | a1 | a
1 | b1 | b
1 | c1 | c
2 | a2 | a
2 | b2 | b
2 | c2 | c
Run Code Online (Sandbox Code Playgroud)
所以基本上,我需要查看,如行: ID,columntitle,value
有没有什么办法可以轻松地做到这一点?
我正在使用SQL Server 2008,我正在尝试取消数据.这是我正在使用的SQL代码,
CREATE TABLE #pvt1 (VendorID int, Sa int, Emp1 int,Sa1 int,Emp2 int)
GO
INSERT INTO #pvt1 VALUES (1,2,4,3,9);
GO
--Unpivot the table.
SELECT distinct VendorID,Orders,Orders1
FROM
(SELECT VendorID, Emp1, Sa,Emp2,Sa1
FROM #pvt1 ) p
UNPIVOT
(Orders FOR Emp IN
(Emp1,Emp2)
)AS unpvt
UNPIVOT
(Orders1 FOR Emp1 IN
(Sa,Sa1)
)AS unpvt1;
GO
Run Code Online (Sandbox Code Playgroud)
这是上述代码的结果.
VendorID Orders Orders1
1 4 2
1 4 3
1 9 2
1 9 3
Run Code Online (Sandbox Code Playgroud)
但我希望我的输出方式如下所示
VendorID Orders Orders1
1 4 2
1 9 3
Run Code Online (Sandbox Code Playgroud)
上述代码的关系是2与4相关,3与9有关. …
unpivot ×10
sql-server ×6
sql ×5
pivot ×3
t-sql ×3
mysql ×2
excel ×1
matrix ×1
null ×1
pivot-table ×1
postgresql ×1
powerquery ×1