sql >> データベース >  >> RDS >> Sqlserver

選択クエリで if 条件を使用する 2 つの SQL スクリプトをマージする

    where ステートメントをスキップして、数値の郵便番号用に 1 つの列を作成し、もう 1 つの列を作成します。このように:

    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´
      

    編集 1

    これにより2列になることはわかっています。ただし、1 つの列にデータ型を含めることはできません。でも、こんなこともできると思います。

    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]
      

    これは、数値が varchar として「0」であるため機能します。

    編集 2

    次のようにすることもできます:

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

    しかし、これはこの問題の汚い解決策です。 sql_variant はデータベース オブジェクトです。したがって、私の結論は次のとおりです。異なるデータ型を使用する場合は、列に使用します。値が同じデータ型になる可能性がある場合は、同じ列を使用します。このような問題を解決するために sql_variant を使用しないでください。コードを維持するために高い代償を払うことになります。

    この助けを願っています。



    1. これらの変数を SQL で宣言するときに何が問題なのかわかりません

    2. パラメータに複数の値がある場合にWHEREステートメントでCASEを使用する

    3. MySQLからフェッチしたデータをJSONとしてphpファイルに返す方法は?

    4. 一般的にどの列が適切なインデックスになりますか?