Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Gabungkan dua skrip SQL gunakan kondisi if di Select query

Saya akan melewatkan pernyataan where dan membuat satu kolom untuk kode pos Numerik dan satu untuk kolom lainnya. Seperti ini:

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´

Edit 1

Saya tahu bahwa ini akan menghasilkan dua kolom. Tapi Anda tidak bisa memiliki tipe data dalam satu kolom. Tapi saya rasa Anda juga bisa melakukan hal seperti ini.

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]

Ini akan bekerja karena yang numerik adalah '0' sebagai varchar.

Edit 2

Anda juga dapat melakukannya seperti ini:

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

Tapi ini adalah solusi kotor untuk masalah ini. sql_variant adalah objek database. Jadi kesimpulan saya adalah:Gunakan ke kolom jika Anda ingin memiliki tipe data yang berbeda. Jika nilainya bisa menjadi tipe data yang sama gunakan kolom yang sama. Jangan gunakan sql_variant untuk menyelesaikan masalah seperti ini. Anda akan membayar mahal untuk mempertahankan kode tersebut.

Semoga bantuan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengalami masalah saat mencoba memulihkan basis data terenkripsi

  2. Temukan Tabel Terkunci di SQL Server

  3. Jumlah parsial antara catatan yang berbeda menggunakan SQL 2008

  4. Bagaimana cara memindahkan tabel ke skema di T-SQL

  5. Saya ingin menampilkan semua tabel yang memiliki nama kolom tertentu