2012-06-27 44 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

相关问题