我有 2 张桌子,Product和Pricing。表Product是父表,而Pricing是子表。当我使用 Product 中的外键查询表 B 时,我想为每个外键生成 11 行,有或没有数据(空填充所有空行和列)
以下是我到目前为止的示例。不能正常工作,但基本上我的目标是,对于每个 ProductID,生成 11 行,用空值填充空行列
SELECT TOP 11
row_number() over(order by TheCount desc) AS row_num, PRODID, packageID
FROM
(
select count(*) AS TheCount , PRODID ,max(PricingID) AS packageID
from
Product left outer join Pricing on PRODID = ProductID
group by PRODID
UNION ALL
SELECT TOP 11 -1, NULL, NULL, NULL, NULL, NUK
FROM sys.columns
) T
例如
row_num PRODID PRICINGID COSBeginQty COSColCode COSTrade COSTypeOfPrice COSIsActive
1 A10D8642-F6DA-499E-9FC9-024FED104877 F82F533E-C1A0-4DC5-BB2C-06FFF2E59C18 2 NULL T2 A 1
2 A10D8642-F6DA-499E-9FC9-024FED104877 372E6B36-F9D1-4EFA-8A15-08CE673EFFBA 12 NULL T1 A 1
3 A10D8642-F6DA-499E-9FC9-024FED104877 45E77A6F-DC2A-44BF-B6AE-0BE27BD2205F 7 NULL T2 A 1
4 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
5 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
6 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
7 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
8 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
9 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
10 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
11 A10D8642-F6DA-499E-9FC9-024FED104877 NULL NULL NULL NULL NULL NULL
这是一个SQLFiddle链接,它显示了我正在扩展的数据和一个工作查询,以便它扩展到第 11 个,即将 11 行显示为列。
使用 Damiens 示例代码,我已经能够将下面的代码放在一起。它可以将产品表中的元素交叉应用到定价表,但是,我更喜欢这样一种情况,即它不会将相同的 PricingID 应用于产品表中的所有 ProductID,而是仅应用于定价记录适用的特定 ProductId .