2017-09-14 10 views
1

得到想要從該查詢輸出我有如下表結構,如何在SQL

SL R_ID Name AMT1 AMT2 AMT3 Pos 
1  5  ggg 10  60 22 Left 
2  5  hhh 44  88 47 Right 

我想輸出篩選

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 

我已經試過這

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 
+0

您的表結構列名稱與您的查詢列不匹配 – SqlZim

+0

幫助我結合您的結構..! – Babai

回答

0

如果您的數據如圖所示,您不應該需要任何聚合或pivot(),您可以通過連接完成此操作。使用

列名如圖中select .. from FinalAccountDetails

測試設置:

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'); 

查詢:

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演示:http://rextester.com/HXCI97819

回報:

+-----+-----+-------+-------+-------+-------+------+-----+-----+-------+-------+-------+-------+-------+ 
| 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 | 
+-----+-----+-------+-------+-------+-------+------+-----+-----+-------+-------+-------+-------+-------+ 
0

是這樣的:

;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; 

假定R_ID是betweent數據的公共ID?

+0

謝謝你們..幫助接受! – Babai