2014-01-22 37 views
0

我有一個查詢加入4桌樹狀查詢在SQL Server上

SELECT 
a.Id AS KelompokInformasi, d.Name AS Domain, d.Id AS Dimension, e.Text AS Description FROM XBRLNamespaces a 
INNER JOIN Hypercubes b 
ON a.XBRLView_ViewId = b.XBRLView_ViewId 
INNER JOIN HypercubeDimensionItems c 
ON b.XBRLHypercubeId = c.XBRLHypercube_XBRLHypercubeId 
INNER JOIN Items d 
ON c.XBRLItem_ItemId = d.ItemId 
INNER JOIN Labels e 
ON d.ItemId = e.XBRLItem_ItemId 
WHERE a.Id like '%AAKX%' 

查詢結果

KelompokInformasi Domain Dimension Description 
AAKX   JWAAKT dim_JWAAKT Jangka Waktu Aset 
AAKX   KOKOLT dim_KOKOLT Kolektibilitas 
AAKX   SNOUPL dim_SNOUPL Status Operasional Usaha Pihak Lawan 

AAKX是從域,尺寸和描述其他數據的父母。

所以,我想改變查詢,並在年底有一個這樣的輸出查詢結果:

KelompokInformasi Domain Dimension Description 
AAKX   NULL NULL  NULL 
NULL   JWAAKT dim_JWAAKT Jangka Waktu Aset 
NULL   KOKOLT dim_KOKOLT Kolektibilitas 
NULL   SNOUPL dim_SNOUPL Status Operasional Usaha Pihak Lawan 

回答

0
SELECT 
'KelompokInformasi' = 
    CASE 
    WHEN a.Id like '%AAKX%' THEN a.Id 
    ELSE NULL 
    END, 
'Domain' = 
    CASE 
    WHEN a.Id like '%AAKX%' THEN NULL 
    ELSE d.Name 
    END, 
'Dimension' = 
    CASE 
    WHEN a.Id like '%AAKX%' THEN NULL 
    ELSE d.Id 
    END, 
'Description' = 
    CASE 
    WHEN a.Id like '%AAKX%' THEN NULL 
    ELSE e.Text 
    END, 
FROM XBRLNamespaces a 
INNER JOIN Hypercubes b 
ON a.XBRLView_ViewId = b.XBRLView_ViewId 
INNER JOIN HypercubeDimensionItems c 
ON b.XBRLHypercubeId = c.XBRLHypercube_XBRLHypercubeId 
INNER JOIN Items d 
ON c.XBRLItem_ItemId = d.ItemId 
INNER JOIN Labels e 
ON d.ItemId = e.XBRLItem_ItemId 
WHERE a.Id like '%AAKX%' 
0

您可以使用使用公用表表達式(CTE),ROW_NUMBER()和同一案件中陳述如上:

CTE AS
選擇
a.Id AS KelompokInformasi,d.Name AS DOMAIN,d.Id AS Dimension,e.Text AS說明,
ROW_NUMBER()OVER(由a.ID分隔a.Id)作爲COL5
FROM XBRLNamespaces一個
INNER JOIN超立方體b
ON a.XBRLView_ViewId = b.XBRLView_ViewId
INNER JOIN HypercubeDimensionItemsÇ
ON b.XBRLHypercubeId = c.XBRLHypercube_XBRLHypercubeId
INNER JOINÐ物品
ON c.XBRLItem_ItemId = d.ItemId
INNER JOIN標籤Ë
ON d.ItemId = e.XBRLItem_ItemId
WHERE a.Id LIKE '%AAKX%')
SELECT CASE
WHEN COL5> 1 THEN ELSE NULL KelompokInformasi END AS KelompokInformasi,
CASE
WHEN COL5 = 1 THEN NULL ELSE DOMAIN END AS DOMAIN,
CASE
WHEN COL5 = 1 THEN NULL ELSE尺寸端爲尺寸,
CASE
WHEN COL5 = 1 THEN ELSE NULL說明END AS說明
FROM CTE

+0

是的,這個查詢幾乎是正確的,但我失去了我的結果的最後一行,它會是什麼錯誤? – Sabilv

+1

一次又一次地分析它可能是你得到的答案。你可以只詳細說明問題,不理解你的結果的最後部分.. –