這與減少重複記錄相反。 用於創建物理清單核對清單的SQL查詢 如果widget-xyz有1個項目的數量返回1行,但是如果它有5個,返回5個行等。 對於特定倉庫中的所有小部件。SQL從一條記錄返回多行
此前,這是通過在excel中檢查數量列的宏來處理的。有沒有辦法讓一個單一的查詢呢?
表是由應用程序生成的FoxPro DBF文件,我輸出到HTML
這與減少重複記錄相反。 用於創建物理清單核對清單的SQL查詢 如果widget-xyz有1個項目的數量返回1行,但是如果它有5個,返回5個行等。 對於特定倉庫中的所有小部件。SQL從一條記錄返回多行
此前,這是通過在excel中檢查數量列的宏來處理的。有沒有辦法讓一個單一的查詢呢?
表是由應用程序生成的FoxPro DBF文件,我輸出到HTML
對於SQL 2005/2008,看看
CROSS APPLY
我會做的是CROSS APPLY每一行與子表爲多的行數量了。次要問題是如何創建一個子表(我建議創建一個XML字符串,然後與運營商的XML解析它) 我希望這給你一個起始點指針....
與
開始declare @table table (sku int, qty int);
insert into @table values (1, 5), (2,4), (3,2);
select * from @table;
sku qty
----------- -----------
1 5
2 4
3 2
您可以生成:
with MainT as (
select *, convert(xml,'<table>'+REPLICATE('<r></r>',qty)+'</table>') as pseudo_table
from @table
)
select p.sku, p.qty
from MainT p
CROSS APPLY
(
select p.sku from p.pseudo_table.nodes('/table/r') T(row)
) crossT
sku qty
----------- -----------
1 5
1 5
1 5
1 5
1 5
2 4
2 4
2 4
2 4
3 2
3 2
這是你想要的嗎? 認真花花公子......下一次花更多精力寫下你的問題。不可能確切地知道你在找什麼。
代替生成一個XML字符串,並使用XML解析函數生成一個計數器作爲內斯特曾建議的,你可以考慮作爲一個計數器加入一個遞歸CTE,作爲LukLed已經暗示到:
WITH Counter AS
(
SELECT 0 i
UNION ALL
SELECT i + 1
FROM Counter
WHERE i < 100
),
Data AS
(
SELECT 'A' sku, 1 qty
UNION
SELECT 'B', 2
UNION
SELECT 'C', 3
)
SELECT *
FROM Data
INNER JOIN Counter ON i < qty
根據查詢分析器,這個查詢比xml僞表要快得多。這種方法還爲您提供了一個帶有自然鍵(sku,i)的記錄集。
在MSSQL中有一個默認的遞歸限制100,它會限制你的計數器。如果您的數量> 100,則可以增加此限制,使用嵌套計數器或創建一個物理表格進行計數。
謝謝這非常值得一看 – datatoo 2010-02-11 20:59:02
此問題的答案高度依賴於您正在使用的數據庫平臺。 SQL Server?甲骨文?訪問? – 2009-11-07 21:46:55