请有人请帮助我。 我试图做一些看起来非常简单和容易的事情。但我似乎无法弄明白。
我试图将我的数据显示为数据透视表而不是“正常显示” 这就是现在的样子。
Store, Product, amount
store1, potatoes, 10
store2, strawberry, 20
但我想要的是:
Product Store1 Store2 Total
potatoes 10 10
strawberry 20 20
这是我正在使用的代码:
Dim rsMenu1
Set rsMenu1 = Server.CreateObject("ADODB.Recordset")
rsMenu1.ActiveConnection = ConnectString
dim sql
sql = "SELECT store.storeOms, datepart(wk,voorraad.datum) as week, products.prodOms, SUM (voorraad.besteld) AS besteld FROM products"
sql = sql & " INNER JOIN voorraad ON products.prodId = voorraad.prodId INNER JOIN store "
sql = sql & " ON voorraad.storeId = store.storeId "
sql = sql & " WHERE datepart(wk,datum) =" & request.querystring("q")
sql = sql & " AND voorraad.besteld > 0"
sql = sql & " GROUP BY store.storeOms, voorraad.datum, products.prodOms"
response.Write(sql)
rsMenu1.Source = sql
rsMenu1.Open()
%>
<table width="200" border="0" class="table table-hover">
<tr>
<th>Winkel</th>
<th>Product</th>
<th>Aantal besteld</th>
</tr>
<%do until rsMenu1.EOF%>
<tr>
<td><%=rsMenu1.Fields.Item("storeOms").Value%></td>
<td><%=rsMenu1.Fields.Item("prodOms").Value%></td>
<td><%=rsMenu1.Fields.Item("besteld").Value%></td>
</tr>
<%rsMenu1.Movenext
Loop%>
答案 0 :(得分:1)
您应该能够直接使用SQL来转动数据。您可以使用具有类似于以下内容的CASE表达式的聚合函数:
select product,
sum(case when store = 'store1' then amount else 0 end) Store1,
sum(case when store = 'store2' then amount else 0 end) Store2,
sum(amount) Total
from yd
group by product;
然后将其添加到现有查询中,代码将类似于:
SELECT products.prodOms,
sum(case when store.storeOms = 'store1' then voorraad.besteld else 0 end) Store1,
sum(case when store.storeOms = 'store2' then voorraad.besteld else 0 end) Store2,
SUM(voorraad.besteld) AS Total,
datepart(wk,voorraad.datum) as week
FROM products
INNER JOIN voorraad
ON products.prodId = voorraad.prodId
INNER JOIN store
ON voorraad.storeId = store.storeId
WHERE datepart(wk,datum) =yourDate
AND voorraad.besteld > 0
GROUP BY products.prodOms, datepart(wk,voorraad.datum)
由于您使用的是SQL Server 2005+,因此您可以使用PIVOT函数,如果您拥有未知数量的存储,则可以在存储过程中使用动态SQL来获取结果。基本语法为:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@yourDate as datetime
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(storeOms)
from store
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT products.prodOms,' + @cols + ', Total , week
from
(
select products.prodOms, store.storeOms,
voorraad.besteld, datepart(wk,voorraad.datum) as week,
sum(voorraad.besteld) over(partition by products.prodOms, datepart(wk,voorraad.datum)) Total
FROM products
INNER JOIN voorraad
ON products.prodId = voorraad.prodId
INNER JOIN store
ON voorraad.storeId = store.storeId
WHERE datepart(wk,datum) = '''+convert(varchar(10), yourDate, 120)+'''
AND voorraad.besteld > 0
) x
pivot
(
sum(besteld)
for storeOms in (' + @cols + ')
) p '
execute(@query)