Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 列名称为非字母值的SQL Server_Sql Server_Tsql_Common Table Expression - Fatal编程技术网

Sql server 列名称为非字母值的SQL Server

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

我正在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
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);

请考虑程序员