Sql 如果为空,则向上移动列单元格

Sql 如果为空,则向上移动列单元格,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我试图将sql语句中的结果集格式化,以放入crystal report的命令中。如果行单元格为空,我需要它向上移动。我知道这不是sql的目的,但它是客户端规范。我这里有一个示例 这就是我现在拥有的 这就是我需要的 提前感谢试试这个,让我知道它是如何为您服务的: WITH DATA1 (ID, TaxCode) AS (SELECT ROW_NUMBER() OVER (ORDER BY TaxCode desc) AS ID, A.TaxCode FROM Table A) , DATA2 (

我试图将sql语句中的结果集格式化,以放入crystal report的命令中。如果行单元格为空,我需要它向上移动。我知道这不是sql的目的,但它是客户端规范。我这里有一个示例

这就是我现在拥有的

这就是我需要的


提前感谢

试试这个,让我知道它是如何为您服务的:

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将对链接起作用:

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

试试这个,让我知道它是如何为您服务的:

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将对链接起作用:

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

在Crystal Reports中,使用PreviousRecord和NextRecord功能不是更好地处理这个问题吗?@user973671-你的小提琴与屏幕截图不匹配:最上面一行的税码是adj,而不是null。你说的升迁是什么意思?从结果集中删除,如屏幕截图所示,或者以不同的顺序放置,例如,在顶部或底部?如果从结果中排除这些行是可以接受的,那么您是否有理由不只包括TAXCODE不为NULL或OWNERTAX的位置(如果该字段指示查询中的行何时应上移)?这些是否有顺序?不同行的前两列中是否有多个空值?@Esoteric-A where not null将排除其他值,我不能这样做,它们必须仍在结果集中。如果列的第一个值为null,我需要它向上移动。Thanks@Gordon-第一行不应该有任何空值。感谢使用PreviousRecord和NextRecord功能在Crystal Reports中处理这些问题不是更好吗?@user973671-您的小提琴与屏幕截图不匹配:最上面一行的税码是adj,而不是null。你说的升迁是什么意思?从结果集中删除,如屏幕截图所示,或者以不同的顺序放置,例如,在顶部或底部?如果从结果中排除这些行是可以接受的,那么您是否有理由不只包括TAXCODE不为NULL或OWNERTAX的位置(如果该字段指示查询中的行何时应上移)?这些是否有顺序?不同行的前两列中是否有多个空值?@Esoteric-A where not null将排除其他值,我不能这样做,它们必须仍在结果集中。如果列的第一个值为null,我需要它向上移动。Thanks@Gordon-第一行不应该有任何空值。谢谢