2014-02-22 139 views
0

我正在使用SQL Server 2005.我试图在一个合并两行。SQL将两行合并为一个

需要帮助排除标识号和ApprovalCode NULL值。

SELECT DISTINCT CASE 
        WHEN (CONVERT(varchar(12), t1.referenceInfo)) like '1000%' THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t1.referenceInfo)) + '"' 
        ELSE 
        '0' 
       END AS [ identity number ], 
       CASE 
        WHEN LEN(ISNUMERIC(CONVERT(varchar(12), t2.referenceInfo))) < 12 THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t2.referenceInfo)) + '"' 
        WHEN (CONVERT(varchar(12), t2.referenceInfo)) LIKE '10%' THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t2.referenceInfo)) + '"' 
        ELSE 
        '0' 
       END AS approvalcode 
    FROM dbo.GUEST_CHECK_LINE_ITEM_HIST t1 
INNER JOIN dbo.GUEST_CHECK_LINE_ITEM_HIST t2 
    ON t1.guestCheckID = t2.guestCheckID 
WHERE t1.guestCheckID = 78362401 
    AND (t1.referenceInfo) LIKE '1000%' 
    and (t2.referenceInfo) NOT LIKE '1000%' 
    --AND LEN(ISNUMERIC(CONVERT(varchar(12), t2.referenceInfo))) < 12 
GROUP BY t1.referenceInfo, t2.referenceInfo 

参考表如下 http://postimg.org/image/45q41bogf/

我想停放值等在身份号码10000%和公园,小于12个数字的核准代码的值。如果批准代码少于12位,则为空。

感激,如果能帮助我在这

结果 http://postimg.org/image/ngr9yzb6z/

回答

0

尝试:

SELECT DISTINCT CASE 
        WHEN LEN(CONVERT(varchar(12), t1.referenceInfo)) > 11 THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t1.referenceInfo)) + '"' 
        WHEN LEN(CONVERT(varchar(12), t2.referenceInfo)) > 11 THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t2.referenceInfo)) + '"' 
        ELSE 
        '0' 
       END AS [ identity number ], 
       CASE 
        WHEN LEN(CONVERT(varchar(12), t1.referenceInfo)) < 12 THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t1.referenceInfo)) + '"' 
        WHEN LEN(CONVERT(varchar(12), t2.referenceInfo)) < 12 THEN 
        (+ '"') + RTRIM(CONVERT(varchar(12), t2.referenceInfo)) + '"' 
        ELSE 
        '0' 
       END AS approvalcode 
    FROM dbo.GUEST_CHECK_LINE_ITEM_HIST t1 
INNER JOIN dbo.GUEST_CHECK_LINE_ITEM_HIST t2 
    ON t1.guestCheckID = t2.guestCheckID 
WHERE t1.guestCheckID = 78362401 
    AND t2.referenceInfo is not null 
    and t1.referenceInfo is not null 
GROUP BY t1.referenceInfo, t2.referenceInfo 

请注意,我更改了where子句的2行。它看起来像你使用“<> 0”,你可能打算使用“不为空”。

0

尝试添加

HAVING [identity number] is not null and approvalcode is not null 

末..

+0

我编辑了这个问题。请帮助家伙。我需要在身份字段中以1000XXX开头的所有数字,并以10XXXX的批准代码开头。并且在批准代码中没有任何以10返回null的数字开始。 – alexcctan