Sql server 列名称为非字母值的SQL Server
我正在CTE中构建一个pivot查询。我有一张桌子桌子1:Sql server 列名称为非字母值的SQL Server,sql-server,tsql,common-table-expression,Sql Server,Tsql,Common Table Expression,我正在CTE中构建一个pivot查询。我有一张桌子桌子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 10
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
在表1中,列计数的数据类型是varchar(10)
我使用动态透视查询透视表_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);
并得到如下结果:
| STORE | 1 | 2 | 3 | 4.a |
+-------+-----+-----+-----+-----+
| 101 | 138 | 282 | null| null|
| 105 | null| null| 60 | 60 |
| 109 | 59 | 97 | 87 | 87 |
现在,我尝试从第3列和第4.a列获取数据,其中3和4.a为null。
我构建的用于获取数据的查询是
Select * from CTE where 3 is null
Select * from CTE where 4.a is null
此外,我还尝试将此内部案例陈述用作:
Select *,case when (3 is null) then 'some result' else '' end from CTE
在每个查询中,我都没有得到查询返回的任何值。
我尝试在每个数据透视列中附加“X”,并从列anme中删除“.”,就像列名一样
| STORE | X1 | X2 | X3 | X4a |
+-------+-----+-----+-----+-----+
| 101 | 138 | 282 | null| null|
| 105 | null| null| 60 | 60 |
| 109 | 59 | 97 | 87 | 87 |
我无法对此提出质疑。是否有人可以帮助我或建议我使用上述查询获取数据的其他方法?您必须将以数字开头的标识符包装为
[]
:
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);
请考虑程序员