Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Обединяване на два SQL скрипта, използване на условие if в заявка за избор

Бих пропуснал израза where и бих създал една колона за цифровия пощенски код и една за другата. Като това:

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

Знам, че това ще доведе до две колони. Но не можете да имате типове данни в една колона. Но мисля, че можете да го направите и нещо подобно.

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]

Това ще работи, тъй като числовата е '0' като varchar.

Редактиране 2

Можете да го направите и по следния начин:

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

Но това е мръсно решение за този проблем. sql_variant е обект на база данни. Така че моето заключение е:Използвайте за колона, ако имате какво да имате различни типове данни. Ако стойностите могат да бъдат от един и същи тип данни, използвайте една и съща колона. Не използвайте sql_variant за решаване на проблеми като този. Ще платите висока цена за поддържането на кода.

Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не можа да се намери съхранена процедура 'dbo.aspnet_CheckSchemaVersion'

  2. SELECT DISTINCT игнорира различни случаи

  3. Странен проблем с производителността:общи изрази на таблици във вградена функция, дефинирана от потребителя

  4. Създаване на заглавка на колона Gridview чрез зареждане на данни от база данни

  5. STRING_SPLIT() в SQL Server 2016:Продължение №2