gpt4 book ai didi

sql-server - 将多行合并为一行

转载 作者:行者123 更新时间:2023-12-04 06:49:08 26 4
gpt4 key购买 nike

我有一个包含用户帐户权限的表,我正在尝试编写一个查询来为每个用户帐户组合返回一行。

这是我所拥有的。

CltKey  AcctKey TranTypeID  Access
10 2499 10 0
10 2499 11 1
10 2499 12 1
10 2764 10 1
10 2764 11 1
10 2764 12 0

这是我想要的。
CltKey  AcctKey TranTypeID1 Access1 TranTypeID2 Access2 TranTypeID3 Access3
10 2499 10 0 11 1 12 1
10 2764 10 1 11 1 12 0

或者甚至更好的类似这样的东西。
CltKey  AcctKey HasTranTypeID1  HasTranTypeID2 HasTranTypeID3
10 2499 0 1 1
10 2764 1 1 0

我曾尝试进行自联接,但我一直为每个 TranTypeID 获取多行。一个等于 0,另一个等于 1。我也尝试过使用嵌套的“Select”语句,但性能很糟糕。有没有人知道如何做到这一点?

谢谢。

编辑:不幸的是,这必须在 SQL 2000 中工作。

最佳答案

我使用 SQLServer 2000 已经有一段时间了,但这可能会奏效。

select cltkey, acctkey, 
max( case when trantypeid = 10 and access = 1
then 1 else 0 end ) as hastrantypeid1,
max( case when trantypeid = 11 and access = 1
then 1 else 0 end ) as hastrantypeid2,
max( case when trantypeid = 12 and access = 1
then 1 else 0 end ) as hastrantypeid3
from table
group by cltkey, acctkey;

如果没有,试试这个:
create view has_access as 
select cltkey, acctkey,
max( case when trantypeid = 10 and access = 1
then 1 else 0 end ) as hastrantypeid1,
max( case when trantypeid = 11 and access = 1
then 1 else 0 end ) as hastrantypeid2,
max( case when trantypeid = 12 and access = 1
then 1 else 0 end ) as hastrantypeid3
from table;

然后从中得到你的结果
select cltkey, acctkey, 
max( hastrantypeid1) as hastrantypeid1,
max( hastrantypeid2 ) as hastrantypeid2,
max( hastrantypeid2 ) as hastrantypeid2
from has_access
group by cltkey, acctkey;

请注意,如果 (cltkey, acctkey) 元组的任何行可以访问该特定类型,这将告诉您 (cltkey, acctkey) 具有访问权限(特定类型)。也就是说,它本质上是按行 OR .

如果该元组的所有行都必须有权访问该元组才能访问,也就是说,如果您想要逐行 AND ,你需要这样做:
min( case when trantypeid = 10 
then case when access = 1
then 1 else 0 end else null end) as hastrantypeid1,
etc.

关于sql-server - 将多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375397/

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