我有很多有状态的产品记录。
我想按状态计算记录,并将这些结果作为列。我尝试了大小写,但是我的重复行的状态不同。
Received StandBy Stocked Pending
Product-1 2 NULL NULL NULL
Product-2 NULL 25 NULL NULL
Product-1 NULL 5 NULL NULL
我想要这样的东西
Received StandBy Stocked Pending
Product-1 2 5 NULL NULL
Product-2 NULL 25 NULL NULL
这是我尝试没有成功的查询:
SELECT
--COALESCE(StatusID, 0) AS StatusID, --=1,2
ProductID,
ProductNumber,
DATEPART(hour,p.ArrivalDate) as ArrivalHour,
DATEPART(minute,p.ArrivalDate) as ArrivalMinute,
ProductWarehouseID,
SUM(CASE WHEN StatusID = 1 THEN 1 END) AS Received,
SUM(CASE WHEN StatusID = 2 THEN 1 END) AS StandBy,
SUM(CASE WHEN StatusID = 3 THEN 1 END) AS Stocked,
SUM(CASE WHEN StatusID = NULL THEN 1 END) AS Pending
FROM Product AS p
GROUP BY
ProductID,
ProductNumber,
DATEPART(hour, p.ArrivalDate),
DATEPART(minute, p.ArrivalDate),
ProductWarehouseID
答案 0 :(得分:1)
我相信您已经将部分查询输出提供给您的解决方案。如果我的理解是正确的,您可能需要对结果使用聚合运算符。大纲在这里:
;WITH Temp AS
(
--Keep your current query here
)
SELECT ProductID, MAX(Received), MAX(StandBy), MAX(Stocked), MAX(Pending)
FROM Temp
GROUP BY ProductID --and any other grouping columns
答案 1 :(得分:0)
我认为在Sql 2000之后,当concat null在MsSql服务器中的默认设置时,你的关键绊脚点是null + 1 = null。您可以通过更改null concat设置的设置来解决您的问题。或者包括"否则0"其他人在此帖之前发布的语法。