很抱歉这个问题很长,但是这里包含了我用来测试场景的所有SQL,希望能够清楚地说明我在做什么.
我在SQL Server 2005中构建了一些动态SQL来生成PIVOT表.
下面是执行此操作的代码.使用各种选择显示原始数据使用GROUP BY的值和PIVOT中的值,我想要它们.
BEGIN TRAN
--Create the table
CREATE TABLE #PivotTest
(
ColumnA nvarchar(500),
ColumnB nvarchar(500),
ColumnC int
)
--Populate the data
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 1)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 2)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Z', 3)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 4)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 5)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('B', 'Z', 6)
INSERT …Run Code Online (Sandbox Code Playgroud) sql-server pivot sql-injection sql-server-2005 dynamic-pivot
我有一个以下格式的数据库:
ID TYPE SUBTYPE COUNT MONTH
1 A Z 1 7/1/2008
1 A Z 3 7/1/2008
2 B C 2 7/2/2008
1 A Z 3 7/2/2008
Run Code Online (Sandbox Code Playgroud)
我可以使用SQL将其转换为:
ID A_Z B_C MONTH
1 4 0 7/1/2008
2 0 2 7/2/2008
1 0 3 7/2/2008
Run Code Online (Sandbox Code Playgroud)
所以,在TYPE,SUBTYPE连接成新的列和COUNT总结的地方ID和MONTH比赛.
任何提示将不胜感激.这可能在SQL中,还是我应该手动编程?
该数据库是SQL Server 2005.
假设有数百TYPES和SUBTYPES因此与"A"和"Z"不应该被硬编码,但动态生成的.
我有一个查询,我正在尝试将行行值转换为列名称,目前我正在使用SUM(Case...) As 'ColumnName'语句,如下所示:
SELECT
SKU1,
SUM(Case When Sku2=157 Then Quantity Else 0 End) As '157',
SUM(Case When Sku2=158 Then Quantity Else 0 End) As '158',
SUM(Case When Sku2=167 Then Quantity Else 0 End) As '167'
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
Run Code Online (Sandbox Code Playgroud)
以上查询效果很好,并且完全符合我的需要.但是,我正在SUM(Case...根据以下查询的结果手写出语句:
Select Distinct Sku2 From OrderDetailDeliveryReview
Run Code Online (Sandbox Code Playgroud)
有没有办法在存储过程中使用T-SQL,我可以SUM(Case...从Select Distinct Sku2 From OrderDetailDeliveryReview查询中动态生成语句,然后执行生成的SQL代码?
我有三张桌子:
产品
ProductID ProductName
1 Cycle
2 Scooter
3 Car
Run Code Online (Sandbox Code Playgroud)
顾客
CustomerID CustomerName
101 Ronald
102 Michelle
103 Armstrong
104 Schmidt
105 Peterson
Run Code Online (Sandbox Code Playgroud)
交易
TID ProductID CustomerID TranDate Amount
10001 1 101 01-Jan-11 25000.00
10002 2 101 02-Jan-11 98547.52
10003 1 102 03-Feb-11 15000.00
10004 3 102 07-Jan-11 36571.85
10005 2 105 09-Feb-11 82658.23
10006 2 104 10-Feb-11 54000.25
10007 3 103 20-Feb-11 80115.50
10008 3 104 22-Feb-11 45000.65
Run Code Online (Sandbox Code Playgroud)
我写了一个查询来对这样的事务进行分组:
SELECT P.ProductName AS Product,
C.CustName AS Customer,
SUM(T.Amount) AS Amount …Run Code Online (Sandbox Code Playgroud) 我需要转动一列(Numbers列).示例需要此数据:
a 1
a 2
b 3
b 4
c 5
d 6
d 7
d 8
d 9
e 10
e 11
e 12
e 13
e 14
Run Code Online (Sandbox Code Playgroud)
看起来像这样
a 1 2
b 3 4
c 5
d 6 7 8 9
e 10 11 12 13 14
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激...
SELECT Name1, Name2, Value FROM mytable 给我以下结果集:
Name1 Name2 Value A P1 1 A P2 1 A P3 2 B P1 3 B P2 1 B P4 1
我如何将其翻译为:
A B
P1 1 4
P2 1 1
P3 2 null
P4 null 1
谢谢,
我正在寻找一些关于设计简单数据透视的帮助,以便我可以将它链接到我的查询的其他部分.
我的数据是这样的
物品表
如果我跑,下面是我的表 Select * from items
ITEM Weight
12345 10
12345 11
654321 50
654321 20
654321 100
Run Code Online (Sandbox Code Playgroud)
此表中有数百个项目,但每个项目代码每个最多只有3个权重记录.
我想要所需的输出
ITEM Weight_1 Weight_2 Weight_3
12345 10 11 null
654321 50 20 100
Run Code Online (Sandbox Code Playgroud)
将会感激任何建议,我已经玩过枢轴,但每个后续项目将权重放入权重4,5,6,7等,而不是从每个项目的权重1开始.
谢谢
更新
以下是我到目前为止使用的,
SELECT r.*
FROM (SELECT 'weight' + CAST(Row_number() OVER (ORDER BY regtime ASC)AS
VARCHAR(10))
line,
id,
weight
FROM items it) AS o PIVOT(MIN([weight]) FOR line IN (weight1, weight2,
weight3)) AS r
Run Code Online (Sandbox Code Playgroud) 我想让枢轴产生的所有 NULL 值都变成 0。我已经将 ISNULL 放置在每个可以想象到的地方,但似乎没有任何效果。枢轴与 ISNULL 兼容吗?代码如下:
DECLARE @startDate datetime
SET @startDate = '2013-01-01'
DECLARE @sql varchar(MAX)
SET @sql = 'SELECT
CLIENTNAME, PROJECTNAME, RESOURCE, [' +
REPLACE(SUBSTRING(CONVERT(varchar, @startDate, 13), 4, 8), ' ', '') + '], [' +
REPLACE(SUBSTRING(CONVERT(varchar, DATEADD(MONTH, 1, @startDate), 13), 4, 8), ' ', '') + '], [' +
REPLACE(SUBSTRING(CONVERT(varchar, DATEADD(MONTH, 2, @startDate), 13), 4, 8), ' ', '') + '], [' +
REPLACE(SUBSTRING(CONVERT(varchar, DATEADD(MONTH, 3, @startDate), 13), 4, 8), ' ', '') + '], [' …Run Code Online (Sandbox Code Playgroud) 嗨,我在SQL Server中尝试下表的透视
REFID | COL1 | COL2 | Sequence
1 abc cde 1
1 lmn rst 2
1 kna asg 3
2 als zkd 2
2 zpk lad 1
Run Code Online (Sandbox Code Playgroud)
我希望输出为
REFID | 1COL1 | 2COL1 | 3COL1 |1COL2|2COL2|3COL2
1 abc lmn kna cde rst asg
2 zpk als null lad zkd null
Run Code Online (Sandbox Code Playgroud)
原始表中的列数是已知的,但行数未知.任何人都可以帮忙