SQL 列名称为非字母值的服务器
SQL Server with non-alphabetic value as column name
我正在 CTE 中构建数据透视查询。我有一个 table 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
在Table_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);
并得到结果为:
| 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 为空。
我为获取数据而构建的查询是
Select * from CTE where 3 is null
Select * from CTE where 4.a is null
我还尝试将此内部 case 语句用作:
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);
我正在 CTE 中构建数据透视查询。我有一个 table 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
在Table_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);
并得到结果为:
| 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 为空。 我为获取数据而构建的查询是
Select * from CTE where 3 is null
Select * from CTE where 4.a is null
我还尝试将此内部 case 语句用作:
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);