如何创建 SQL 视图以使用两个表转置数据

问题描述 投票:0回答:1

我需要找到一种方法来创建一个 SQL 视图,允许我转置一些数据,这些数据在一个表中的特定列包含另一个表中的列名。

表:表单控件:

表单类型 字段名称 列名称
STK COL001 颜色
STK SIZ001 尺寸1
STK LIC001 许可证

表:表单数据:

股票代号 颜色 尺寸1 许可证
12345 R 2 XX
ABCDE L 1 AA
AB123 G 3 BB

所需的视图结果数据:

表单类型 股票代号 字段名称 价值
STK 12345 COL001 R
STK 12345 SIZ001 2
STK 12345 LIC001 XX
STK ABCDE COL001 L
STK ABCDE SIZ001 1
STK ABCDE LIC001 AA
STK AB123 COL001 G
STK AB123 SIZ001 3
STK AB123 LIC001 BB

字段名称/列可能会发生变化,所以理想情况下我需要视图是动态的,但如果不可能,那么现在只包含当前字段/列的固定视图就可以了。

请问有什么想法吗?

曾尝试使用 PIVOT,但对如何操作有点迷失。

sql view pivot transpose
1个回答
0
投票

交叉联接应该能够从 FormControl 和 FormData 表中获取所有组合,并使用 case 语句来选择每列的行。

这里是fiddle,它显示了预期的输出:

SELECT
    fc.formtype,
    fd.stockcode,
    fc.fieldname,
    CASE fc.column_name
        WHEN 'Colour' THEN fd.colour
        WHEN 'Size1' THEN fd.size1
        WHEN 'License' THEN fd.license
        ELSE NULL
    END AS value
FROM
    formcontrol fc
CROSS JOIN formdata fd
WHERE fc.formtype = 'STK'
order by fd.stockcode;

预期输出

© www.soinside.com 2019 - 2024. All rights reserved.