SQL Server-查找col';按指定值指定的名称
我有两列指定了名称。我需要选择列的名称,其中是指定的值 例如:SQL Server-查找col';按指定值指定的名称,sql,sql-server,Sql,Sql Server,我有两列指定了名称。我需要选择列的名称,其中是指定的值 例如: ----------------------------------- id| a col | b col | c col | d col | ----------------------------------- 1 | N | N | A | N | 2 | A | N | N | N | 3 | N | A | N | N | 我
-----------------------------------
id| a col | b col | c col | d col |
-----------------------------------
1 | N | N | A | N |
2 | A | N | N | N |
3 | N | A | N | N |
我需要得到这样的结果
--------------------
id | column's name |
--------------------
1 | c col |
2 | a col |
3 | b col |
表中有更多的列,所以我需要指定用于此操作的列。如何在SQL Server 2014中做到这一点?应该足够了:
SELECT id,
col
FROM (
SELECT *
FROM YourTable
) as p
UNPIVOT (
[value] FOR col IN ([a col], [b col], [c col], [d col])
) as unpvt
WHERE [value] = 'A'
输出:
id col
1 c col
2 a col
3 b col
应该足够了:
SELECT id,
col
FROM (
SELECT *
FROM YourTable
) as p
UNPIVOT (
[value] FOR col IN ([a col], [b col], [c col], [d col])
) as unpvt
WHERE [value] = 'A'
输出:
id col
1 c col
2 a col
3 b col
您可以像下面这样使用UNPIVOT查询
declare @q varchar(max)
set @q='select id,columnname from '+
'(select id,columnname,data from '+
'(select * from tablename)t '+
'UNPIVOT '+
'(data for columnname in ( '+
stuff((select ',['+c.name +'] ' from sys.columns c join sys.tables t
on c.object_id=t.object_id and t.name like 'tablename' FOR XML PATH('')),1,1,'')
+')) u)t where data like ''A'''
exec @q
您可以像下面这样使用UNPIVOT查询
declare @q varchar(max)
set @q='select id,columnname from '+
'(select id,columnname,data from '+
'(select * from tablename)t '+
'UNPIVOT '+
'(data for columnname in ( '+
stuff((select ',['+c.name +'] ' from sys.columns c join sys.tables t
on c.object_id=t.object_id and t.name like 'tablename' FOR XML PATH('')),1,1,'')
+')) u)t where data like ''A'''
exec @q
您应该查找pivot或unpivot在多列中存储相同“类型”数据的可能重复项通常是数据模型损坏的标志-通常伴随着一些数据,而不是作为元数据结束-例如,在这里,您要编写查询的数据已嵌入到列名中。如果可能的话,最好是修复数据模型,以便将所有数据建模为数据。你应该查找pivot或unpivot将同一“类型”的数据存储在多列中的可能重复项通常是数据模型损坏的迹象-通常伴随着一些数据,而不是作为元数据结束-如此处,要编写查询的数据已嵌入到列名中。如果可能,最好修复数据模型,以便将所有数据建模为数据。