Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Połącz dwa skrypty SQL, jeśli warunek w zapytaniu wybierającym

Pominąłbym instrukcję where i utworzyłbym jedną kolumnę dla Numerycznego kodu pocztowego i jedną dla drugiej. Tak:

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´

Edytuj 1

Wiem, że da to dwie kolumny. Ale nie możesz mieć typów danych w jednej kolumnie. Ale myślę, że możesz też zrobić coś takiego.

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 zadziała, ponieważ cyfra to „0” jako varchar.

Edytuj 2

Możesz to również zrobić w ten sposób:

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

Ale to jest brudne rozwiązanie tego problemu. sql_variant to obiekt bazy danych. Więc mój wniosek jest następujący:użyj do kolumny, jeśli chcesz mieć różne typy danych. Jeśli wartości mogą być tego samego typu danych, użyj tej samej kolumny. Nie używaj sql_variant do rozwiązywania takich problemów. Za utrzymanie kodu zapłacisz wysoką cenę.

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przyznać właścicielowi bazy danych (DBO) uprawnienie ZESPÓŁ DOSTĘPU ZEWNĘTRZNEGO?

  2. Jaki jest najlepszy sposób radzenia sobie z DBNull?

  3. Usuń konto pocztowe bazy danych w programie SQL Server (T-SQL)

  4. Używanie PIVOT i JOIN razem

  5. Usuwanie dużych ilości danych z SQL Server 2008