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