SQL 要列出的列
SQL Columns to List
我有以下table内容:-
我需要生成以下输出:-
P1 C1
P1 C3
P2 C1
P2 C4
P3 C2
P3 C3
P3 C4
如何从我的 table 创建该列表?
谢谢
P
这应该根据提供的信息起作用。
select u.P, -- whatever the column containing p1, p2, etc is called
u.C,
u.Contents -- what is stored in each cell
from xtable
unpivot
(
Contents
for C in (c1, c2, c3)
) u
where u.Contents like 'x'
http://sqlfiddle.com/#!3/4d908/1/0
我几乎稍微修改了 Ako 在评论中链接的示例。
您必须使用 UnPivot 才能获得所需的结果
DECLARE @MyTable TABLE
(Attribute VARCHAR(10) , C1 VARCHAR(10), C2 VARCHAR(10), C3 VARCHAR(10), C4 VARCHAR(10))
INSERT INTO @MyTable VALUES
('P1','X', NULL,'X',NULL), ('P2','X',NULL,NULL,'X'),('P3',NULL,'X','X','X')
SELECT * FROM @MyTable
SELECT uPivot.Attribute, uPivot.Quatr, uPivot.IsMarked
FROM @MyTable Tab1
UNPIVOT
(
IsMarked
for Quatr in (C1, C2, C3, C4)
) uPivot;
这是我最后实现的方案
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ColName TABLE (Name VARCHAR(500))
DECLARE @ColCSV VARCHAR(MAX)
INSERT INTO @ColName
SELECT
Column_Name
FROM
information_schema.columns
WHERE
Table_Name = 'SMC_PatientCondition'
AND Column_Name NOT IN
('ReportingCode',
'P_PatientId',
'P_SysId',
'Condition')
SET @ColCSV = (SELECT SUBSTRING((SELECT ',' + Name FROM @ColName FOR XML PATH ('')),2,2000) AS CSV)
SET @SQL =
('
SELECT
P_SysID,
Conditions
FROM
(
SELECT
P_SysId,
RIGHT(Conditions, LEN(Conditions)-2) Conditions,
HasCondition
FROM
SMC_PatientCondition
UNPIVOT
(
HasCondition FOR Conditions IN ('+ @ColCSV +')
)Con
) UserConditions
WHERE
HasCondition = ''Yes''
')
EXEC sp_executesql @SQL
我有以下table内容:-
我需要生成以下输出:-
P1 C1
P1 C3
P2 C1
P2 C4
P3 C2
P3 C3
P3 C4
如何从我的 table 创建该列表?
谢谢
P
这应该根据提供的信息起作用。
select u.P, -- whatever the column containing p1, p2, etc is called
u.C,
u.Contents -- what is stored in each cell
from xtable
unpivot
(
Contents
for C in (c1, c2, c3)
) u
where u.Contents like 'x'
http://sqlfiddle.com/#!3/4d908/1/0
我几乎稍微修改了 Ako 在评论中链接的示例。
您必须使用 UnPivot 才能获得所需的结果
DECLARE @MyTable TABLE
(Attribute VARCHAR(10) , C1 VARCHAR(10), C2 VARCHAR(10), C3 VARCHAR(10), C4 VARCHAR(10))
INSERT INTO @MyTable VALUES
('P1','X', NULL,'X',NULL), ('P2','X',NULL,NULL,'X'),('P3',NULL,'X','X','X')
SELECT * FROM @MyTable
SELECT uPivot.Attribute, uPivot.Quatr, uPivot.IsMarked
FROM @MyTable Tab1
UNPIVOT
(
IsMarked
for Quatr in (C1, C2, C3, C4)
) uPivot;
这是我最后实现的方案
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ColName TABLE (Name VARCHAR(500))
DECLARE @ColCSV VARCHAR(MAX)
INSERT INTO @ColName
SELECT
Column_Name
FROM
information_schema.columns
WHERE
Table_Name = 'SMC_PatientCondition'
AND Column_Name NOT IN
('ReportingCode',
'P_PatientId',
'P_SysId',
'Condition')
SET @ColCSV = (SELECT SUBSTRING((SELECT ',' + Name FROM @ColName FOR XML PATH ('')),2,2000) AS CSV)
SET @SQL =
('
SELECT
P_SysID,
Conditions
FROM
(
SELECT
P_SysId,
RIGHT(Conditions, LEN(Conditions)-2) Conditions,
HasCondition
FROM
SMC_PatientCondition
UNPIVOT
(
HasCondition FOR Conditions IN ('+ @ColCSV +')
)Con
) UserConditions
WHERE
HasCondition = ''Yes''
')
EXEC sp_executesql @SQL