我一直在努力处理我构建的更大查询的某个部分。它基本上试图根据雇员中是否有一个,两个或三个银行账户,将员工的银行详细信息放在最多三列中。
我通过VisualStudio使用Azure SQL服务器。
数据库的上下文是一组雇佣参数,银行业务,税务信息,所有这些都需要连接并导出然后推送到API。我从旧的基础服务器中构建了旧的.csv表,因此有时候主键周围有些模糊,但每行都是唯一的,因此选择可以解决。
过去几天我在网上找不到任何东西,希望有人能指出我正确的方向。我不是在这里乞求代码。
有什么建议吗?干杯!
答案 0 :(得分:0)
您尚未指定哪个数据库,因此我将尝试“大多数”通用解决方案。您需要根据数据库的特定语法调整此SQL。这是一个镜头:
select
e.empid, e.name,
a1.accountno as Account1, a1.bsb as BSB1,
a2.accountno as Account2, a2.bsb as BSB2,
a3.accountno as Account3, a3.bsb as BSB3
from employee e
left join (
select accountno, bsb from account x1 where x1.empid = e.empid
limit 1
) a1
left join (
select accountno, bsb from account x2 where x2.empid = e.empid
and x2.accountno not in (x1.accountno)
limit 1
) a2
left join (
select accountno, bsb from account x3 where x3.empid = e.empid
and x3.accountno not in (x1.accountno, x2.accountno)
limit 1
) a3
答案 1 :(得分:0)
诀窍是旋转,所以我将展示如何做到这一点 - 这里有条件聚合:
select t2.empid,
max(case when seqnum = 1 then accountno end) as accountno_1,
max(case when seqnum = 1 then bsb end) as bsb_1,
max(case when seqnum = 2 then accountno end) as accountno_2,
max(case when seqnum = 2 then bsb end) as bsb_2,
max(case when seqnum = 3 then accountno end) as accountno_3,
max(case when seqnum = 3 then bsb end) as bsb_3
from (select t2.*,
row_number() over (partition by empid order by accountno) as seqnum
from table2 t2
) t2
group by empid;
我会让你弄清楚如何加入其他信息。这真的不是那么难。
另请注意,帐户的原始排序不会保留。 SQL表表示无序集。您没有显示任何捕获原始订单的列,因此按订单号排序。如果您有订购列,请在order by
。