sql >> Databasteknik >  >> RDS >> Sqlserver

Slå samman två SQL-skriptanvändningar if condition i Select-fråga

Jag skulle hoppa över where-satsen och skapa en kolumn för det numeriska postnumret och en för den andra. Så här:

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´

Redigera 1

Jag vet att detta kommer att resultera i två kolumner. Men du kan inte behöva skriva in data i en kolumn. Men jag tror att du kan göra något så här också.

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]

Detta kommer att fungera eftersom den numeriska är '0' som en varchar.

Redigera 2

Du kan också göra så här:

SELECT CAST('asdasd' AS sql_variant)
UNION ALL
SELECT CAST(0 AS sql_variant)

Men detta är en smutsig lösning på detta problem. sql_variant är ett databasobjekt. Så min slutsats är:Använd till kolumn om du vill ha olika datatyper. Om värdena kan vara av samma datatyp använd samma kolumn. Använd inte sql_variant för att lösa sådana här problem. Du kommer att betala ett högt pris för att behålla koden.

Hoppas detta hjälper.



  1. Hur man säkerhetskopierar en partitionerad tabell i PostgresSQL 10

  2. Påträffade symbolen =

  3. SQL Välja från två tabeller med inre koppling och limit

  4. LPAD() Funktion i PostgreSQL