我通常不使用数据透视表和固定存储过程。我认为问题是关键声明。
我有下表:
#status_totals
ProductName Orders Status
-------------------------------
Product1 1 inprogress
Product1 1 inprogress
Product1 1 ordered
Product1 1 ordered
Product1 1 inprogress
这是我正在使用的sql语句。
select ProductName, ordered
from #status_totals
pivot (SUM(Orders) for Status in ([ordered])) as StatusTotals
这是结果
ProductName ordered
---------------------
Product1 NULL
Product1 NULL
Product1 1
Product1 1
Product1 NULL
这不是我想要的。我应该有一行
ProductName ordered
---------------------
Product1 2
不确定如何获得想要的结果。
答案 0 :(得分:0)
我将使用条件汇总函数,
CASE WHEN
和sum
做透视。
CREATE TABLE T(
ProductName varchar(50),
Orders int,
Status varchar(50)
);
INSERT INTO T VALUES ('Product1',1,'inprogress');
INSERT INTO T VALUES ('Product1',1,'inprogress');
INSERT INTO T VALUES ('Product1',1,'ordered');
INSERT INTO T VALUES ('Product1',1,'ordered');
INSERT INTO T VALUES ('Product1',1,'inprogress');
查询1 :
SELECT ProductName ,SUM(CASE WHEN Status = 'ordered' THEN Orders END) ordered
FROM T
GROUP BY ProductName
Results :
| ProductName | ordered |
|-------------|---------|
| Product1 | 2 |
答案 1 :(得分:0)
为此无需使用PIVOT
,您应该使用简单的CASE
表达式和SUM
:
SELECT ProductName,
SUM(CASE WHEN [Status] = 'ordered' THEN Orders END) Ordered
FROM #status_totals
GROUP BY ProductName;
答案 2 :(得分:0)
要解决这个问题? 然后看起来像这样:
SELECT *
FROM
(
SELECT ProductName, Orders, Status
FROM #status_totals
WHERE Status IN ('ordered')
) AS src
PIVOT
(
SUM(Orders) FOR Status IN ([ordered])
) AS pvt;
但是要获得预期的结果?
这应该已经足够了:
SELECT ProductName, SUM(Orders) AS [ordered]
FROM #status_totals
WHERE Status = 'ordered'
GROUP BY ProductName
ORDER BY ProductName;