gpt4 book ai didi

sql - 将行转换为列值 - 返回单行

转载 作者:行者123 更新时间:2023-12-01 12:38:42 26 4
gpt4 key购买 nike

我是 SQL 编程的新手,我正在处理一份关于我们财务过帐的报告。

帖子使用 1 到多个维度组合的字符串排序。这些维度存储在数据库中,我希望能够将字符串分隔成每个财务行的列。

DimensionAttributeLevelValueAllView 包含维度字符串,但它被分隔成行

Displayvalue  
703310
5022
PEN

我曾尝试使用 case-when 结构将值过滤到列中,但随后它生成了单独的行:

Account  | Department  | Misc
703310
| 5022
| PEN

代替

Account  | Department  | Misc
703310 | 5022 | PEN

下面的查询应该将上面的维度与相应的发布行组合起来,但它创建了一个单独的行,如上所示,每行的财务金额相同。

SELECT
Case When B.ValueOrdinal='1' Then B.Displayvalue end as 'Account',
case when B.ValueOrdinal='2' then B.Displayvalue end as 'Department',
case when B.ValueOrdinal='3' then B.Displayvalue end as 'Misc',
A.Text,
Sum(A.reportingcurrencyamount) as 'Posted Amount',
A.Recid

From GeneralJournalAccountEntry A
Inner Join DimensionAttributeLevelValueAllView B on A.Ledgerdimension = B.ValueCombinationRecID
Inner Join DIMENSIONATTRIBUTEVALUECOMBINATION C on A.Ledgerdimension = C.RecID

Where C.accountstructure in ('5637145326','5637165585')

Group by A.Recid, B.Valueordinal, B.Displayvalue, A.Text

我已经考虑过动态 Pivot 函数,但我似乎无法弄清楚如何为此使用它。

提前致谢

最佳答案

您聚合的字段过多。试试这个:

SELECT MAX(Case When B.ValueOrdinal='1' Then B.Displayvalue end) as Account,
MAX(case when B.ValueOrdinal='2' then B.Displayvalue end) as Department,
MAX(case when B.ValueOrdinal='3' then B.Displayvalue end) as Misc,
A.Text,
Sum(A.reportingcurrencyamount) as PostedAmount,
A.Recid
From GeneralJournalAccountEntry A Inner Join
DimensionAttributeLevelValueAllView B
on A.Ledgerdimension = B.ValueCombinationRecID Inner Join
DIMENSIONATTRIBUTEVALUECOMBINATION C
on A.Ledgerdimension = C.RecID
Where C.accountstructure in ('5637145326','5637165585')
Group by A.Recid, A.Text;

我不鼓励您对列别名使用单引号。仅对字符串和日期常量使用单引号。通常,只需尝试提供根本不需要任何转义字符的列名称(例如,不在名称中放置空格)。

关于sql - 将行转换为列值 - 返回单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26994027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com