Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दो SQL स्क्रिप्ट का उपयोग मर्ज करें यदि स्थिति चयन क्वेरी में है

मैं व्हेयर स्टेटमेंट को छोड़ दूंगा और न्यूमेरिक पोस्टल कोड के लिए एक कॉलम और दूसरे के लिए एक कॉलम बनाऊंगा। इस तरह:

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' है।

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. एसक्यूएल:संग्रहीत प्रक्रिया में खंड में:मूल्यों को कैसे पास करें

  2. एक SQL सर्वर तालिका से दूसरी पंक्ति में एक पंक्ति की प्रतिलिपि कैसे करें

  3. sp_MSForEachDB फ़ंक्शन के भीतर साइड-इफ़ेक्टिंग ऑपरेटर का अमान्य उपयोग

  4. एसक्यूएल सर्वर:इंडेक्स कॉलम पसंद करते हैं?

  5. डेटाबेस + विंडोज प्रमाणीकरण + उपयोगकर्ता नाम/पासवर्ड?