如何解决哪些SQL查询或视图将显示“动态列”
您想在MyTable中透视每个“名称/值”对行…尝试以下sql:
DECLARE @Data TABLE (
DataID INT IDENTITY(1,1) PRIMARY KEY,
Data VARCHAR(MAX)
)
DECLARE @Meta TABLE (
DataID INT ,
MetaName VARCHAR(MAX),
MetaData VARCHAR(MAX)
)
INSERT INTO @Data
SELECT 'Data'
INSERT INTO @Meta
SELECT 1, 'Date', CAST(GetDate() as VARCHAR(20))
UNION
SELECT 1, 'Name', 'Joe Test'
SELECT * FROM @Data
SELECT * FROM @Meta
SELECT
D.DataID,
D.Data,
MAX(CASE MetaName WHEN 'Date' THEN MetaData ELSE NULL END) as Date,
MAX(CASE MetaName WHEN 'Name' THEN MetaData ELSE NULL END) as Name
FROM
@Meta M
JOIN @Data D ON M.DataID = D.DataID
GROUP BY
D.DataID,
D.Data
解决方法
我有一个数据表,并且允许人们向该表中添加元数据。
我给他们提供了一个接口,使他们可以像对待添加数据的表中添加额外的列一样对待它,但实际上我是将数据存储在另一个表中。
Data Table
DataID
Data
Meta Table
DataID
MetaName
MetaData
因此,如果他们想要一个用于存储数据,日期和名称的表,那么我会将数据存储在数据表中,并在元名称中包含单词“
Date”,在MetaData中具有日期,并在元数据表,元数据名称中包含“名称”,元数据中包含名称。
我现在需要一个查询,这些查询从这些表中获取信息,并将其呈现为好像来自具有两个附加列“ Data”和“
Name”的单个表,因此对于客户而言,它看起来像是具有其自定义列的单个表:
MyTable
Data
Date
Name
或者换句话说,我如何从这里开始:
Data Table
DataID Data
1 Testing!
2 Hello,World!
Meta Table
DataID MetaName MetaData
1 Date 20081020
1 Name adavis
2 Date 20081019
2 Name mdavis
到这里:
MyTable
Data Date Name
Testing! 20081020 adavis
Hello,World! 20081019 mdavis
多年前,当我使用PHP在MySQL中进行此操作时,我做了两个查询,第一个查询获取额外的元数据,第二个查询将它们全部结合在一起。我希望现代数据库具有替代方法来处理此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。