简体   繁体   English

如何从SQL查询中获得所需的输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM