【发布时间】:2015-07-16 14:13:35
【问题描述】:
我正在使用 pgAdmin III / PostgreSQL 9.4 来存储和处理我的数据。我当前数据的样本:
x | y
--+--
0 | 1
1 | 1
2 | 1
5 | 2
5 | 2
2 | 2
4 | 3
6 | 3
2 | 3
我希望如何格式化:
1, 2, 3 -- 列名是唯一的 y 值0, 5, 4 -- 第一个对应的x 值1, 5, 6 -- 第二个对应的x 值
@ 987654330@ -- 等等
它需要是动态的,因为我有数百万行和数千个 y 的唯一值。
为此使用动态枢轴方法是否正确?我无法成功地实现这一点:
DECLARE @columns VARCHAR(8000)
SELECT @columns = COALESCE(@columns + ',[' + cast(y as varchar) + ']',
'[' + cast(y as varchar)+ ']')
FROM tableName
GROUP BY y
DECLARE @query VARCHAR(8000)
SET @query = '
SELECT x
FROM tableName
PIVOT
(
MAX(x)
FOR [y]
IN (' + @columns + ')
)
AS p'
EXECUTE(@query)
它在第一行停止并给出错误:
syntax error at or near "@"
我见过的所有动态枢轴示例都使用这个,所以我不确定我做错了什么。任何帮助表示赞赏。感谢您的宝贵时间。
**注意:以正确的顺序存储x 值很重要,因为顺序很重要。如有必要,我可以添加另一列来指示顺序。
【问题讨论】:
-
首先,您是否尝试打印您的
@query?您可能会在那里找到有用的东西并对其进行调试。 -
嗨,Evaldas,我在尝试打印 @query 时遇到同样的错误:“@”或附近的语法错误
-
问题是代码是为 Microsoft SQL Server 编写的,并且是为 Microsoft SQL Server 编写的,因此在 Postgresql 中不起作用。不过,在 Postgresql 中也有一些方法可以做到这一点,例如这个问题所示:stackoverflow.com/questions/28087948/…
-
也看到这个问题 - 它有更好的答案:stackoverflow.com/questions/3002499/…
-
哦,谢谢。我对 SQL 很陌生,我尝试的来源没有指定使用的 SQL 类型。我将从另一篇文章开始工作,看看我能做什么。
标签: sql postgresql pivot