Sql*_*mer 4 t-sql sql-server common-table-expression
我在CTE中建立枢纽查询。我有一个表Table_1:
Store Count xCount
------- ---- ------
101 1 138
109 1 59
101 2 282
109 2 97
105 3 60
109 3 87
105 4.a 60
109 4.b 87
Run Code Online (Sandbox Code Playgroud)
在表_1中,列数的数据类型为varchar(10)。
我使用动态数据透视查询来旋转Table_1
DECLARE @DynamicCol AS NVARCHAR(MAX),
@SQL AS NVARCHAR(MAX)
select @DynamicCol = STUFF((SELECT distinct ',' + QUOTENAME(count)
from table_1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @SQL = ';WITH CTE as (
SELECT store,' + @DynamicCol + ' from
(
select * from table_1
) res
pivot
(
MAX(xCount)
for Count in (' + @DynamicCol + ')
) piv ) SELECT *
FROM CTE where 4.a is null'
execute(@SQL);
Run Code Online (Sandbox Code Playgroud)
并得到如下结果:
| STORE | 1 | 2 | 3 | 4.a |
+-------+-----+-----+-----+-----+
| 101 | 138 | 282 | null| null|
| 105 | null| null| 60 | 60 |
| 109 | 59 | 97 | 87 | 87 |
Run Code Online (Sandbox Code Playgroud)
现在,我尝试从第3和4.a列获取数据,其中3和4.a为空。我建立以获取数据的查询是
Select * from CTE where 3 is null
Select * from CTE where 4.a is null
Run Code Online (Sandbox Code Playgroud)
我也试图使用此内部case语句为:
Select *,case when (3 is null) then 'some result' else '' end from CTE
Run Code Online (Sandbox Code Playgroud)
在每个查询中,我没有得到查询返回的任何值。我尝试在每个枢纽分析的列中附加“ X”并删除“。” 来自列主题,就像列名看起来像
| STORE | X1 | X2 | X3 | X4a |
+-------+-----+-----+-----+-----+
| 101 | 138 | 282 | null| null|
| 105 | null| null| 60 | 60 |
| 109 | 59 | 97 | 87 | 87 |
Run Code Online (Sandbox Code Playgroud)
我无法查询。有人可以帮助我或建议我任何其他想法来使用上述查询获取数据吗?
您必须包装以digit开头的标识符[]:
DECLARE @DynamicCol AS NVARCHAR(MAX),
@SQL AS NVARCHAR(MAX)
select @DynamicCol = STUFF((SELECT distinct ',' + QUOTENAME(count)
from table_1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @SQL = ';WITH CTE as (
SELECT store,' + @DynamicCol + ' from
(
select * from table_1
) res
pivot
(
MAX(xCount)
for Count in (' + @DynamicCol + ')
) piv ) SELECT *
FROM CTE where [4.a] is null' -- here
execute(@SQL);
Run Code Online (Sandbox Code Playgroud)