[英]How to get desired output from this query in sql
I have a table structure listed below, 我有一个下面列出的表结构,
SL R_ID Name AMT1 AMT2 AMT3 Pos
1 5 ggg 10 60 22 Left
2 5 hhh 44 88 47 Right
I want Output Like this 我想要这样的输出
LSL LID LName LAMT1 LAMT2 LAMT3 LPos SL RID RName RAMT1 RAMT2 RAMT3 RPos
1 5 ggg 10 60 22 Left 2 5 hhh 44 88 47 Right
I have tried this 我已经试过了
SELECT SL, [LSL], [LSL_HEAD], [LAMT], [LCURR], [LPRE], [RSL], [RSL_HEAD], [RAMT], [RCURR], [RPRE]
FROM
(select SL, R_ID, SL_HEAD, AMT, CURR, PRE, L_SLIDE from FinalAccountDetails f) as st
PIVOT
(
max(R_ID)
FOR
[L_SLIDE]
IN ([LSL], [LSL_HEAD], [LAMT], [LCURR], [LPRE], [RSL], [RSL_HEAD], [RAMT], [RCURR], [RPRE])
) AS pvt
If your data is as shown, you should not need any aggregation or pivot()
, you can do this with a join. 如果您的数据如图所示,则您不需要任何聚集或pivot()
,可以通过联接来实现。
using the column names as shown in the select .. from FinalAccountDetails
: 使用如select .. from FinalAccountDetails
中的select .. from FinalAccountDetails
所示的列名:
test setup: 测试设置:
create table finalaccountdetails ([sl] int, [R_id] int, [sl_head] varchar(3), [amt] int, [curr] int, [pre] int, [l_slide] varchar(5)) ;
insert into finalaccountdetails values
(1, 5, 'ggg', 10, 60, 22, 'Left'),(2, 5, 'hhh', 44, 88, 47, 'Right');
query: 查询:
select
lsl = l.SL
, lid = l.R_ID
, lname = l.SL_HEAD
, lamt1 = l.AMT
, lamt2 = l.CURR
, lamt3 = l.PRE
, lpos = l.L_SLIDE
, rsl = r.SL
, rid = r.R_ID
, rname = r.SL_HEAD
, ramt1 = r.AMT
, ramt2 = r.CURR
, ramt3 = r.PRE
, rpos = r.L_SLIDE
from finalaccountdetails l
inner join finalaccountdetails r
on l.r_id = r.r_id
and l.L_SLIDE = 'left'
and r.L_SLIDE = 'right'
rextester demo: http://rextester.com/HXCI97819 extrester演示: http ://rextester.com/HXCI97819
returns: 返回:
+-----+-----+-------+-------+-------+-------+------+-----+-----+-------+-------+-------+-------+-------+
| lsl | lid | lname | lamt1 | lamt2 | lamt3 | lpos | rsl | rid | rname | ramt1 | ramt2 | ramt3 | rpos |
+-----+-----+-------+-------+-------+-------+------+-----+-----+-------+-------+-------+-------+-------+
| 1 | 5 | ggg | 10 | 60 | 22 | Left | 2 | 5 | hhh | 44 | 88 | 47 | Right |
+-----+-----+-------+-------+-------+-------+------+-----+-----+-------+-------+-------+-------+-------+
Something like: 就像是:
;WITH LeftData AS
(
SELECT FAD.*
FROM FinalAccountDetails AS FAD
WHERE FAD.Pos = 'Left'
)
,RightData AS
(
SELECT FAD.*
FROM FinalAccountDetails AS FAD
WHERE FAD.Pos = 'Right'
)
SELECT LD.SL AS LSL ,
LD.R_ID AS LID ,
LD.Name AS LName ,
LD.AMT1 AS LATM1 ,
LD.ATM2 AS LATM2 ,
LD.ATM3 AS LATM3 ,
LD.Pos AS LPos ,
RD.SL AS RSL ,
RD.R_ID AS RID ,
RD.Name AS RName ,
RD.AMT1 AS RATM1 ,
RD.ATM2 AS RATM2 ,
RD.ATM3 AS RATM3 ,
RD.Pos AS RPos
FROM LeftData AS LD
INNER JOIN RightData AS RD ON LD.R_ID = RD.R_ID;
Presuming R_ID is the common ID betweent the data? 假设R_ID是数据之间的通用ID?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.