sql-server - 如何使用其他表中的列名和值创建表
问题描述
我有一个鞋业公司的项目,需要加入 3 张桌子。我可以用 C# winform 中的 DataTable 来做,但我想知道我是否可以直接在 SQL 中组合。
表 1 命名 MoldQty,我将使用 3 列
Model | Size |MoldQuantity
--------------------------
AAA |6.5 | 1
AAA |7 | 2
AAA |7.5 | 1
AAA |8 | 2
AAA |8.5 | 1
AAA |9 | 2
AAA |9.5 | 1
表 2 名称 具有许多其他列的订单
Order Num | Model |
---------------------
20200101xx | AAA |
20200101xy | AAA |
20200101yy | BBB |
表 3 名称 OrderDetail
Order Num | Size |Quantity
----------------------------
20200101xx | 6.5 |100
20200101xx | 7.5 |100
20200101xx | 8.5 |200
20200101xy | 7 |100
20200101xy | 8 |100
20200101xy | 9 |200
现在我想为模型 AAA 制作一个表,其中包含一些列的名称来自 MoldQty.Size 和值来自 OrderDetail.Quantity
Order Num | 6.5 | 7 | 7.5 | 8 | 8.5 | 9 | 9.5 |
--------------------------------------------------------------
20200101xx | 100 | Null | 100 | Null | 200 | Null | Null |
20200101xy | Null | 100 | Null | 100 | Null | 100 | Null |
有人知道吗?太感谢了。
解决方案
仅当查询是动态的时,才需要对 MoldQty 表的引用。以下是示例表、数据和查询。
DROP TABLE IF EXISTS #Order;
GO
CREATE TABLE #Order
(OrderNum CHAR(10) NOT NULL,
Model CHAR(3) NOT NULL
);
GO
INSERT INTO #Order
(OrderNum,
Model
)
VALUES
('20200101xx',
'AAA'
),
('20200101xy',
'AAA'
),
('20200101yy',
'BBB'
);
DROP TABLE IF EXISTS #OrderDetail;
GO
CREATE TABLE #OrderDetail
(OrderNum CHAR(10) NOT NULL,
Size VARCHAR(5) NOT NULL,
Quantity INT NOT NULL
);
GO
INSERT INTO #OrderDetail
(OrderNum,
Size,
Quantity
)
VALUES
('20200101xx',
'6.5',
100
),
('20200101xy',
'7',
100
),
('20200101xx',
'7.5',
200
),
('20200101xy',
'8',
100
),
('20200101xx',
'8.5',
100
),
('20200101xy',
'9',
200
);
SELECT o.OrderNum,
SUM(IIF(od.Size = '6.5', od.Quantity, NULL)) '6.5',
SUM(IIF(od.Size = '7', od.Quantity, NULL)) '7',
SUM(IIF(od.Size = '7.5', od.Quantity, NULL)) '7.5',
SUM(IIF(od.Size = '8', od.Quantity, NULL)) '8',
SUM(IIF(od.Size = '8.5', od.Quantity, NULL)) '8.5',
SUM(IIF(od.Size = '9', od.Quantity, NULL)) '9',
SUM(IIF(od.Size = '9.5', od.Quantity, NULL)) '9.5'
FROM #Order o
JOIN #OrderDetail od ON o.OrderNum = od.OrderNum
WHERE o.Model = 'AAA'
GROUP BY o.OrderNum;
推荐阅读
- angular - 删除或清空 FormArray Angular 中的特定 FormControl
- python - wtforms TextField/SearchField 与烧瓶应用程序的自动完成(类似于谷歌搜索栏)
- reactjs - 添加类 onclick
- c++ - SetPerTcpConnectionEStats 失败,无法多次获取 GetPerTcpConnectionEStats c++
- flutter - 在颤动的BottomNavigationBar中不起作用
- python - pandas 在文档单词矩阵中转换文档单词列表
- javascript - 发送未平仓头寸订阅后,带有 kraken 的 Websocket 关闭
- javascript - WOW.js:您的浏览器不支持 MutationObserver
- php - 如何在mysql中使用带有group by的子查询?
- c++ - 混合延迟加载 dll 和手动调用 LoadLibraryA 是否安全?