2012-06-27 42 views
2

我試圖從sql語句格式化結果集以放入水晶報表的命令。如果行單元格爲空,我需要它向上移動。我知道這不是SQL所做的,但它是客戶端規範。我有一個例子在這裏,http://sqlfiddle.com/#!3/76999/11如果爲空,則將列單元格向上移動

,這是我現在有

1 http://img259.imageshack.us/img259/7186/have.jpg

,這是我需要

1 http://img59.imageshack.us/img59/465/needd.jpg

在此先感謝

+1

那不是更好地在使用PreviousRecord和NextRecord功能水晶報表處理? – LittleBobbyTables

+0

@ user973671 - 您的小提琴與屏幕截圖不匹配:最上面一行的'TAXCODE'是'adj',不是null。 「移動」是什麼意思?如屏幕截圖所示,或者以不同的順序(例如頂部或底部)排除結果集?如果從結果中排除這些行是可以接受的,是否有某些原因,您不要僅僅包含「WHERE TAXCODE IS NOT NULL」(或「OWNERTAX」,如果這是指示行何時應該「向上移動」的字段)查詢? –

+0

這些命令是否以某種方式排列?在不同行的前兩列中是否有多個NULL? –

回答

0

試試這個並讓我知道它是如何工作的:

WITH DATA1 (ID, TaxCode) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY TaxCode desc) AS ID, A.TaxCode FROM Table A) 

, DATA2 (ID, OwnerTax) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY Ownertax desc) AS ID, A.OwnerTax FROM Table A) 

, DATA3 (ID, OwnerOther) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY OwnerOther desc) AS ID, A.OwnerOther FROM Table A) 

, DATA4 (ID, DEDCode) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY DEDCode desc) AS ID, A.DEDCode FROM Table A) 

SELECT DATA1.TaxCode, DATA2.OwnerTax, DATA3.OwnerOther, DATA4.DEDCode 
FROM DATA1 
LEFT JOIN DATA2 ON DATA1.ID = DATA2.ID 
LEFT JOIN Data3 ON DATA1.ID = DATA3.ID 
LEFT JOIN Data4 ON DATA1.ID = DATA4.ID 

的SQL下面將工作的鏈接,如果您複製http://sqlfiddle.com/#!3/76999/11並將其直接粘貼到右邊的窗口:

With Source1 (TaxCode, OwnerTax, OwnerOther, dedCode) 
As(
SELECT 
CASE WHEN [Adjdesc] = 'TAX' THEN [TaxCode] ELSE null END AS TaxCode, 
CASE WHEN [Adjdesc] = 'TAX' THEN [adj] END AS OwnerTax, 
CASE WHEN [Adjdesc] <> 'TAX' THEN [adj] END AS OwnerOther, 
CASE WHEN [Adjdesc] <> 'TAX' THEN [TaxCode] ELSE null END AS dedCode 

FROM test4 AS A 
WHERE adj IS NOT NULL) 

, DATA1 (ID, TaxCode) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY TaxCode desc) AS ID, A.TaxCode FROM Source1 A) 

, DATA2 (ID, OwnerTax) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY Ownertax desc) AS ID, A.OwnerTax FROM Source1 A) 

, DATA3 (ID, OwnerOther) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY OwnerOther desc) AS ID, A.OwnerOther FROM Source1 A) 

, DATA4 (ID, DEDCode) 
AS 
(SELECT ROW_NUMBER() OVER (ORDER BY DEDCode desc) AS ID, A.DEDCode FROM Source1 A) 

SELECT DATA1.TaxCode, DATA2.OwnerTax, DATA3.OwnerOther, DATA4.DEDCode 
FROM DATA1 
LEFT JOIN DATA2 ON DATA1.ID = DATA2.ID 
LEFT JOIN Data3 ON DATA1.ID = DATA3.ID 
LEFT JOIN Data4 ON DATA1.ID = DATA4.ID 
+0

這很有效,感謝您的幫助 – user973671

+0

很高興能幫到您! – EastOfJupiter

相關問題