sql >> Databáze >  >> RDS >> Sqlserver

Sloučit dva skripty SQL použít podmínky if ve výběrovém dotazu

Přeskočil bych příkaz where a vytvořil jeden sloupec pro číselné PSČ a jeden pro druhé. Takhle:

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´

Úprava 1

Vím, že to bude mít za následek dva sloupce. Ale nemůžete mít datové typy v jednom sloupci. Ale myslím, že to můžete udělat i takto.

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]

To bude fungovat, protože numerická jednička je '0' jako varchar.

Úprava 2

Můžete to udělat také takto:

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

Ale to je špinavé řešení tohoto problému. Sql_variant je databázový objekt. Můj závěr je tedy:Použijte sloupec, pokud chcete mít různé datové typy. Pokud hodnoty mohou být stejného datového typu, použijte stejný sloupec. K řešení takových problémů nepoužívejte sql_variant. Za údržbu kódu zaplatíte vysokou cenu.

Doufám, že to pomůže.



  1. Otázka spouštěče MySQL:spouští se pouze při změně sloupce?

  2. Jak spustit úlohu SQL Server Agent pomocí T-SQL

  3. Operátoři T-SQL SET Část 2:INTERSECT a EXCEPT

  4. Jak se vyhnout konfliktním podmínkám při použití metody find_or_create DBIx::Class::ResultSet?