我试图将每个产品每周的总数量输入表中。每当有人订购产品时,都会将其输入到包含以下信息的数据库中:
表:订单
order_id
order
order_date
" order"有8个选项,它们是预设的,永远不会改变。我需要查看该表中每个项目的计数..
我想看到这样的事情:
Order week 1 week 2 week 3 week 4 etc...
order1 30 10 11 23
order2 40 4 0 44
order3 88 23 12 22
有人能告诉我这是怎么实现的吗?
谢谢..我很坚持这个。
答案 0 :(得分:1)
正如NickyvV所说,你想要一个支点。但是,SQL Server无法接受数据透视表中的动态列,因此您必须将它们拼写出来。另外,您可能不希望第一列中的order_id,因为您只会获得计数中的1和0,而是类似于product_id。所以你可以这样做:
SELECT
product_id,
[week 1],[week 2],[week 3],[week 4],[week 5]
FROM
(SELECT
product_id,
'week ' + cast(DatePart(wk,[order_date]) as varchar(2)) as WeekName
FROM [Orders]) as o
pivot (count(WeekName)
for WeekName in ([week 1],[week 2],[week 3],[week 4],[week 5])) as p
不幸的是,您必须拼出所有可能的周名。有一些方法可以使用动态SQL,但我不推荐它们,因为它们相当复杂和令人讨厌。另外,请记住,如果这是进入报告,您通常会在报告应用程序(SSRS等)而不是数据库中进行此转动。