转置查询创建节点 (SQL Server 2008)
Posted
技术标签:
【中文标题】转置查询创建节点 (SQL Server 2008)【英文标题】:Transpose query creates nodes (SQL Server 2008) 【发布时间】:2011-12-12 16:31:29 【问题描述】:我终于找到了要执行的查询,以获取一行中一个内容的所有 ID(逗号分隔)。
以下查询成功了:
您不需要查看查询,因为它已经做了应该做的事情。
SELECT
taxonomy_item_id,
SUBSTRING(
(SELECT ', ' + CAST(taxonomy_id AS varchar) AS Expr1
FROM taxonomy_item_tbl AS t2
WHERE (t1.taxonomy_item_id = taxonomy_item_id) AND (taxonomy_language_id = 2067)
ORDER BY taxonomy_item_id, taxonomy_id FOR XML PATH('')
), 1, 1000) AS taxonomy_ids
FROM
taxonomy_item_tbl AS t1
WHERE
(taxonomy_language_id = 2067) AND (taxonomy_item_id = 180555)
GROUP BY
taxonomy_item_id
唯一的问题是我得到的数据结果:
180555 | <Expr1>, 404</Expr1><Expr1>, 405</Expr1><Expr1>, 723</Expr1><Expr1>, 1086</Expr1><Expr1>, 1087</Expr1><Expr1>, 1118</Expr1><Expr1>, 1124</Expr1><Expr1>, 1126</Expr1>
我不需要<Expr1>
节点。有没有办法删除这个?如果我在查询中删除AS Expr1
,那么它会自动添加回来
谢谢
【问题讨论】:
你是怎么运行这个的?AS Expr1
不应该被添加回来,除非你有一些正在使用的查询生成器
什么是查询生成器?我可以禁用它吗?
我不知道。 “你是如何运行它的”我问......
-1 表示仍在使用查询生成器并重复相同的错误***.com/q/8486378/27535
【参考方案1】:
如果您不想要 <Expr1>
- 那就别问了!
你有:
(SELECT ', ' + CAST(taxonomy_id AS varchar) AS Expr1
AS Expr1
导致 <Expr1>
被添加 - 所以不要在那里有那个表达式。
试试
SELECT
taxonomy_item_id,
SUBSTRING(
(SELECT ', ' + CAST(taxonomy_id AS VARCHAR)
FROM dbo.taxonomy_item_tbl AS t2
WHERE t1.taxonomy_item_id = taxonomy_item_id
AND taxonomy_language_id = 2067
ORDER BY taxonomy_item_id, taxonomy_id
FOR XML PATH('')
), 1, 1000) AS taxonomy_ids
FROM
dbo.taxonomy_item_tbl AS t1
WHERE
taxonomy_language_id = 2067
AND taxonomy_item_id = 180555
GROUP BY
taxonomy_item_id
【讨论】:
如果我正确理解问题,我认为某些查询生成器(MSQuery、Access 等)会将其重新添加。以上是关于转置查询创建节点 (SQL Server 2008)的主要内容,如果未能解决你的问题,请参考以下文章
在sql server 2008中如何查询本日、本周和本月数据
sql server2008怎么实现查询某个数据库中所有的表名