我有一個 SQL 查詢,它回傳orderid并quantity為所有帶有orderid >= 11075and 的訂單排序orderid <= 11076:
select orderid, quantity
from [order details]
where ((orderid >= 11075) AND (orderid <= 11076))
我的結果集是:

但是我的表格中需要小計。我需要生成一個控制中斷報告,提供訂單號 11075 和 11076 的總數量。COMPUTE并且COMPUTE BY在我的 SQL Server 版本中不起作用。我該如何實施?
像這樣的表:
table, th, td {
border: 1px solid black;
}
<table>
<tr>
<th>orderid</th>
<th>quantity</th>
</tr>
<tr>
<td>11075</td>
<td>10</td>
</tr>
<tr>
<td>11075</td>
<td>30</td>
</tr>
<tr>
<td>11075</td>
<td>2</td>
</tr>
<tr>
<td></td>
<td>Sum</td>
</tr>
<tr>
<td></td>
<td>=======</td>
</tr>
<tr>
<td></td>
<td>42</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>11076</td>
<td>20</td>
</tr>
<tr>
<td>11076</td>
<td>20</td>
</tr>
<tr>
<td>11076</td>
<td>10</td>
</tr>
<tr>
<td></td>
<td>Sum</td>
</tr>
<tr>
<td></td>
<td>===========</td>
</tr>
<tr>
<td></td>
<td>50</td>
</tr>
</table>
uj5u.com熱心網友回復:
您可以生成您想要使用的結果GROUPING SETS和一些有條件的反透視
SELECT
v.orderid,
v.quantity
FROM (
SELECT
orderid,
quantity = SUM(quantity),
grouping = GROUPING(quantity)
FROM YourTable t
GROUP BY GROUPING SETS
(
(orderid, quantity),
(orderid)
)
) t
CROSS APPLY (
SELECT *
FROM (VALUES
(NULL, 'SUM', 1),
(NULL, '====', 2),
(NULL, '', 4)
) v(orderid, quantity, ordering)
WHERE t.grouping = 1
UNION ALL
SELECT
CASE WHEN t.grouping = 0 THEN t.orderid END,
CAST(t.quantity AS varchar(20)),
3
) v
ORDER BY
t.orderid,
t.grouping,
v.ordering;
資料庫<>小提琴
要創建您想要的表,您可以使用FOR XML,但是它會非常復雜,而且用另一種語言可能更容易完成。
uj5u.com熱心網友回復:
正如其他人評論的那樣,這似乎更像是一個演示問題。
但是,您可以構建一個查詢,該查詢產生的結果類似于您想要使用的結果ROW_NUMER()和GROUP BY ROLLUP:
select orderid
, case when orderid is null then'grand total' else isnull(try_convert(varchar,rn),'subtotal') end as rn
, sum(quantity) as quantity
from (
select *, ROW_NUMBER() OVER (partition by orderid order by orderid) as rn
from order_details
where ((orderid >= 11075) AND (orderid <= 11076))
) tmp
group by rollup (orderid, rn);
這也將包括最后的總計行。
| 訂單號 | 恩 | 數量 |
|---|---|---|
| 11075 | 1 | 10 |
| 11075 | 2 | 30 |
| 11075 | 3 | 2 |
| 11075 | 小計 | 42 |
| 11076 | 1 | 20 |
| 11076 | 2 | 20 |
| 11076 | 3 | 10 |
| 11076 | 小計 | 50 |
| 累計 | 92 |
注意:如果你已經有某種其他列的就是中每一個獨特的orderid,例如像一個獨特的id列,你也可以省略ROW_NUMBER(),并使用該列,而不是rn在GROUP BY ROLLUP直接。
看到這個 db<>fiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/361373.html
標籤:sql sql-server 数据库 数据表 小计
