Syn*_*Hub 5 sql-server view unpivot
我管理一个应用程序,该应用程序有多个用户通过 Web 前端将数据输入到 MSSQL 数据库中。每个单独的“记录”在多个表中可以有大约 100 个数据库列(有时在同一个表中有多个行)。编写 SQL 查询将在每个“记录”中输出 1 行,其中包含我们用于报告目的所需的所有列,这是相对简单的,例如:
Assessor Date Length Colour Weight
Steve 2/4/17 23.4 NULL 45
John 4/4/17 NULL Blue NULL
Brenda 4/4/17 NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
我想生成一个简单的输出,列出未记录数据的所有内容,即保持 NULL 的字段。例如:
Assessor Date Field
Steve 2/4/17 Colour
John 4/4/17 Length
John 4/4/17 Weight
Brenda 4/4/17 Length
Brenda 4/4/17 Length
Brenda 4/4/17 Colour
Brenda 4/4/17 Weight
Run Code Online (Sandbox Code Playgroud)
目前我已经尝试了以下方面的内容:
select
assessor
,date
,Field = 'Length'
from
dbo.table1
where [Length] is NULL
UNION ALL
select
assessor
,date
,Field = 'Colour'
from
dbo.table1
where [Colour] is NULL
UNION ALL
...
Run Code Online (Sandbox Code Playgroud)
有没有办法在不建立这么长的联合列表的情况下产生我需要的输出?我已经研究过 UNPIVOT 但这似乎排除了 NULL。
小智 3
尝试这个:
WITH CTE(Assessor,Date,Field) AS (
select Assessor,Date,Field
from(
select Assessor,Date,ISNULL(Length,'Length') as Length,ISNULL(Colour,'Colour') as Colour,ISNULL(Weight,'Weight') as Weigth
from TestTable) as OP
unpivot(
Field for Fields IN (Length,Colour,Weigth)) as UP)
select Assessor,Date,Field from CTE
where Field in ('Colour','Length','Weigth')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
210 次 |
最近记录: |