Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Mesclar dois scripts SQL use if condition na consulta Select


Eu pularia a instrução where e criaria uma coluna para o código postal numérico e uma para a outra. Assim:
SELECT 
    [Fm].[Id], 
    [Sdp].[FirstName], 
    [Sdp].[LastName], 
    [Sdp].[SSN],
    [Sdp].[StoreName], 
    (
        CASE WHEN ISNUMERIC([Sdp].[PostalCode])=1
            THEN 0
            ELSE NULL
        END
    ) AS NumericPostalCode,
    (
        CASE WHEN ISNUMERIC([Sdp].[PostalCode])=0
            THEN [Sdp].[PostalCode]
            ELSE NULL
        END
    ) AS PostalCode,
    [Fc].[Id], 
    [Sdp].[Address]
FROM 
    [SRM].[SiteMembers].[DProfile] AS [Sdp]
INNER JOIN [SRM].[SiteMembers].[Member] AS [Sm]
    ON [Sdp].[Member_Id] = [Sm].[Id]
INNER JOIN [FRM].[Members].[Member] AS [Fm]
    ON [Sm].[UserId] = [Fm].[UserId]
INNER JOIN [SRM].[General].[City] AS [Sc]
    ON [Sdp].[City_Id]=[Sc].[Id]
INNER JOIN [FRM].[General].[City] AS [Fc]
    ON [Fc].[Title]=[Sc].[Title] 
    COLLATE SQL_Latin1_General_CP1_CI_AS´

Editar 1

Eu sei que isso resultará em duas colunas. Mas você não pode ter que tipos de dados em uma coluna. Mas eu acho que você pode fazer algo assim também.
SELECT 
    [Fm].[Id], 
    [Sdp].[FirstName], 
    [Sdp].[LastName], 
    [Sdp].[SSN],
    [Sdp].[StoreName],
    (
        CASE WHEN ISNUMERIC([Sdp].[PostalCode])=0
            THEN [Sdp].[PostalCode]
            ELSE '0'
        END
    ) AS PostalCode,
    [Fc].[Id], 
    [Sdp].[Address]

Isso funcionará porque o numérico é '0' como um varchar.

Editar 2

Você também pode fazer assim:
SELECT CAST('asdasd' AS sql_variant)
UNION ALL
SELECT CAST(0 AS sql_variant)

Mas esta é uma solução suja para este problema. O sql_variant é um objeto de banco de dados. Então minha conclusão é:Use a coluna se você quer ter diferentes tipos de dados. Se os valores puderem ser do mesmo tipo de dados, use a mesma coluna. Não use sql_variant para resolver problemas como este. Você pagará um alto preço pela manutenção do código.

Espero que esta ajuda.