試試這個並讓我知道它是如何工作的:
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
那不是更好地在使用PreviousRecord和NextRecord功能水晶報表處理? – LittleBobbyTables
@ user973671 - 您的小提琴與屏幕截圖不匹配:最上面一行的'TAXCODE'是'adj',不是null。 「移動」是什麼意思?如屏幕截圖所示,或者以不同的順序(例如頂部或底部)排除結果集?如果從結果中排除這些行是可以接受的,是否有某些原因,您不要僅僅包含「WHERE TAXCODE IS NOT NULL」(或「OWNERTAX」,如果這是指示行何時應該「向上移動」的字段)查詢? –
這些命令是否以某種方式排列?在不同行的前兩列中是否有多個NULL? –