[英]How pass main table selected column value as sub query column name in SQL Server
有沒有辦法將選定的表列值傳遞給子查詢?
例如,我有一個Stock
表,它有一些簡單的 A_Stock、B_Stock、C_Stock 等部分股票......
| Item Code | A_Stock | B_Stock | C_Stock
+--------------+----------+----------+---------
| Item1 | 10 | 13 | 35
| Item2 | 15 | 20 | 45
| Item3 | 8 | 6 | 33
我從該表中獲得 select ItemCode 和 Section (A, B...) Like
SELECT ItemCode, Section
FROM tableName
| Item Code | Section
+--------------+---------
| Item1 | A
| Item3 | C
| Item2 | B
然后我想 select 項目明智的部分股票
預期結果
SELECT
ItemCode,
(SELECT CONCAT(ST.SectionFrom, '_Stock') firstTable
WHERE ItemCode = ST.ItemCode) AS Stock
FROM
secondTable ST
| Item Code | Stock
+---------------+-------
| Item1 | 10
| Item3 | 33
| Item2 | 20
但實際結果是:
| Item Code | Stock
+---------------+----------
| Item1 | A_Stock
| Item3 | C_Stock
| Item3 | B_Stock
如果有人有解決方案,請幫助我。
您可以加入這些表並使用case..when
表達式:
SELECT ItemCode,
(case
when section = 'A' then A_Stock
when section = 'B' then B_Stock
when section = 'C' then C_Stock
end ) AS Stock
FROM secondTable ST
JOIN stock S
ON S.ItemCode = ST.ItemCode
一種方法是取消透視數據並加入:
select st.*, v.stock
from stocktable st cross apply
(values ('A', a_stock), ('B', b_stock), ('C', c_stock)
) v(section, stock) join
tablename t
on t.item_code = st.item_code and t.section = v.section;
我喜歡這個解決方案,因為它暗示了您應該如何將數據實際存儲在stock
表中。 通常,您不希望僅通過數字區分多個列。 您需要一個包含itemcode
、 section
和stock
作為三列的表。
-- Here is a solution that is not preferred as it hard codes the column names.
--DROP TABLE firsttable
CREATE TABLE firsttable
(
[Item_Code] nvarchar(8)
,[A_Stock] int
,[B_Stock] int
,[C_Stock] int
)
--DROP TABLE secondtable
CREATE TABLE secondtable
(
[Item_Code] nvarchar(8)
,[Section] nvarchar(1)
)
INSERT INTO firsttable ([Item_Code],[A_Stock],[B_Stock],[C_Stock])
VALUES ('Item1', 10, 13, 35)
,('Item2', 15, 20, 45)
,('Item3', 8, 6, 33)
SELECT * FROM firsttable
INSERT INTO secondtable ([Item_Code],[Section])
VALUES ('Item1', 'A')
,('Item2', 'B')
,('Item3', 'C')
SELECT * FROM secondtable
SELECT f.Item_Code
,( CASE
WHEN CONCAT(s.Section,'_Stock') = 'A_Stock'THEN A_Stock
WHEN CONCAT(s.Section,'_Stock') = 'B_Stock' THEN B_Stock
ELSE C_Stock
END
)
AS Stock
FROM firsttable f, secondtable s
WHERE f.Item_Code = s.Item_Code
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.