我有两张桌子:
RUNS
ID numb bay0 bay1 bay2
-----------------------------
1 55 aa bb cc
2 66 gg NULL dd
3 77 dd bb NULL
DATA
ID run_id serial data
------------------------------
1 2 gg xx
2 2 dd xx
DATA.run_id是指向RUNS.ID的外键。
'串行'以及' bay%'的价值外键指向另一个表'产品'。
我想要的是这样的输出:
OUTPUT
ID run_id serial data bay
------------------------------
1 2 gg xx bay0
2 2 dd xx bay2
这样第一个表的列标题就被放入第二个表数据的输出行中。
我一直在玩大量的查询以使其工作,例如获取列标题:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'a'
AND TABLE_SCHEMA = 'b'
AND COLUMN_NAME LIKE 'bay%'
但最终我无法看到我将如何获取/合并/连接此输出。有人能帮助我吗?
由于
答案 0 :(得分:1)
DECLARE @Table1 TABLE
( ID int, run_id int, serial varchar(2), data varchar(2))
;
INSERT INTO @Table1
( ID , run_id , serial , data )
VALUES
(1, 2, 'gg', 'xx'),
(2, 2, 'dd', 'xx')
;
DECLARE @Table2 TABLE
( ID int, serial int, bay0 varchar(2), bay1 varchar(2), bay2 varchar(2))
;
INSERT INTO @Table2
( ID , serial , bay0 , bay1 ,bay2)
VALUES
(1, 55, 'aa', 'bb','cc'),
(2, 66, 'gg', NULL,'dd')
;
SELECT T.ID,T.run_id,T.serial,T.DATA,tt.COL FROM @Table1 t
INNER JOIN
(
SELECT COL,VAL FROM @Table2
cross apply (values('bay0',bay0),('bay1',bay1),('bay2',bay2))cs(COL,VAL)
WHERE col <> 'BAY1')tt
on T.serial = TT.VAL
答案 1 :(得分:1)
如果列数已修复,您可以执行以下操作:
SELECT
data.id, data.run_id, data.serial, data.data,
CASE data.serial
WHEN runs.bay0 THEN 'bay0'
WHEN runs.bay1 THEN 'bay1'
WHEN runs.bay2 THEN 'bay2'
ELSE NULL
END AS bay
FROM
data
JOIN runs ON (data.run_id = runs.id)
只需在CASE
语句中列出所有可能的变体。不优雅,但在您将bayX
列添加/删除到data
表格之前会有效。