Sql server 如何使用SQL查询获取此输出
我需要帮助 我有这张数据表作为说明。(有很多不同的数据行,不同的客户。请在回答中考虑这一点) 我希望它仅显示类别Sql server 如何使用SQL查询获取此输出,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我需要帮助 我有这张数据表作为说明。(有很多不同的数据行,不同的客户。请在回答中考虑这一点) 我希望它仅显示类别实际(第5行),包括透视类别上的RowID,如下所示 这应该是输出 RowID Customer Date Week1 Week2 Week3 Week4 Actual Forecast 5 Cust1 Jun-11 10 20 30 40 200 100 任何帮助都将不胜感激 提前谢谢 我试
实际
(第5行),包括透视类别上的RowID
,如下所示
这应该是输出
RowID Customer Date Week1 Week2 Week3 Week4 Actual Forecast
5 Cust1 Jun-11 10 20 30 40 200 100
任何帮助都将不胜感激
提前谢谢
我试过了,但它给了我这个我不想要的
RowID Customer Date Week1 Week2 Week3 Week4 Actual Forecast
1 Cust1 Jun-11 10 null null null null null
2 Cust1 Jun-11 null 20 null null null null
3 Cust1 Jun-11 null null 30 null null null
4 Cust1 Jun-11 null null null 40 null null
5 Cust1 Jun-11 null null null null 200 null
6 Cust1 Jun-11 null null null null null 100
PIVOT
可以,但之后需要GROUP BY
和SUM
或者,您可以在所有不同的代码条件上进行自联接,但与使用PIVOT将值列表放在一个位置相比,它的可维护性可能稍差。
PIVOT
可以,但之后需要按
分组和求和
或者,您可以对所有不同的代码条件进行自连接,但与PIVOT一样,将值列表放在一个位置相比,它的可维护性稍差。您可以这样做:
SELECT
RowID,
Customer,
Date,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 1') AS Week1,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 2') AS Week2,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 3') AS Week3,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 4') AS Week4,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Actual') AS Actual,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Forecast') AS Forecast
FROM
sotest
WHERE
Customer = 'Cust1'
AND Date = 'Jun-11'
AND Category = 'Actual'
应该很容易封装到存储过程中,您可以在其中传递CustomerID和Date参数。您可以这样做:
SELECT
RowID,
Customer,
Date,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 1') AS Week1,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 2') AS Week2,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 3') AS Week3,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 4') AS Week4,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Actual') AS Actual,
(SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Forecast') AS Forecast
FROM
sotest
WHERE
Customer = 'Cust1'
AND Date = 'Jun-11'
AND Category = 'Actual'
应该很容易封装到存储过程中,您可以在其中传递CustomerID和Date参数。尝试基于两个参数的解决方案(@MyCustomer
&@MyDate
):
基本思想是在src
派生表中只筛选pivot所需的行和列,不多也不少。基于两个参数尝试此解决方案(@MyCustomer
&@MyDate
):
基本思想是在src
派生表中只过滤pivot所需的行和列,不多也不少。您尝试过pivot命令吗?使用数据透视表,我已经添加了数据透视的结果。在上述问题中添加。但这不是我想要的。有什么帮助吗?你试过pivot命令吗?使用数据透视表,我已经添加了数据透视的结果。在上述问题中添加。但这不是我想要的。有什么帮助吗?
DECLARE @MyCustomer VARCHAR(10) = 'Cust1'
,@MyDate VARCHAR(10) = 'Jun-11';
SELECT pvt.*
FROM
(
SELECT t.Customer, t.Date, t.Category, t.Figure1
FROM MyTable t
WHERE t.Customer = @MyCustomer AND t.[Date] = @MyDaye
) src
PIVOT ( SUM(src.Figure1) FOR src.Category IN ([Week 1], [Week 2], [Week 3], [Week 4], [Actual], [Forecast]) ) pvt