sql-server - 使用非字母值作为列名的 SQL Server
问题描述
我正在 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
在 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
我也尝试将这个内部案例语句用作:
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);
推荐阅读
- vbscript - 使用 VBScript 从目录中提取所有 .gz 文件
- jquery - JQuery隐藏可折叠菜单点击其他任何地方 - 模糊 -
- java - 我的 JList 没有显示
- algorithm - 绘制最大长度为 4 的 BFS 图形
- javascript - 在 React.js 和 sass/css 中隐藏带有过渡的汉堡侧边栏
- java - 如何在 iText 7 中查找文本位置和边界
- c++ - 读取和写入文件
- python - 如何使用python和selenium将文本发送到类型属性为隐藏的输入元素
- sql-server - 在 ASP.NET Core 应用程序中使用 Entity Framework Core 和 SQL Server 2017 的多个租户
- python - 在同一个项目中使用 Python2 和 Python3