की तुलना में दो पंक्तियों (दोनों के साथ अलग-अलग आईडी) और चेक अगर अपने स्तंभ मूल्यों वही कर रहे हैं. सभी पंक्तियों और स्तंभों में कर रहे हैं एक ही मेज

0

सवाल

मैं एक तालिका नाम "रोस्टर" और इस तालिका में मैं 22 कॉलम.

मैं क्वेरी करने के लिए चाहते हैं और की तुलना में किसी भी 2 पंक्तियों की है कि विशेष रूप से तालिका करने के उद्देश्य के साथ की जाँच करें यदि प्रत्येक स्तंभ के मूल्यों की है कि 2 पंक्तियों में वही कर रहे हैं. आईडी कॉलम हमेशा अलग मूल्यों प्रत्येक पंक्ति में तो मैं शामिल नहीं होगा आईडी स्तंभ के लिए तुलना. मैं सिर्फ यह उपयोग करने के लिए संदर्भित करने के लिए क्या पंक्तियों के लिए इस्तेमाल किया जाएगा की तुलना.

अगर सभी स्तंभ मूल्यों वही कर रहे हैं: या तो सिर्फ प्रदर्शन कुछ भी नहीं है (मैं पसंद करते हैं, यह एक) या सिर्फ वापसी के 2 पंक्तियों के रूप में यह है.

वहाँ रहे हैं अगर कुछ स्तंभ मान ही नहीं: या तो प्रदर्शन उन स्तंभ नाम केवल या दोनों प्रदर्शित स्तंभ का नाम और उसके मूल्य (मैं पसंद करते हैं, यह एक).

उदाहरण:

रोस्टर तालिका:

आईडी नाम समय
1 N1 0900
2 N1 0801

आउटपुट:

आईडी समय
1 0900
2 0801

या

प्रदर्शन "समय"

नोट: वास्तव में मैं कर रहा हूँ ठीक है के साथ जो कुछ भी परिणाम या जिस तरह के उत्पादन के रूप में लंबे समय के रूप में मुझे पता कर सकते हैं किसी भी तरह से है कि 2 पंक्तियों ही नहीं हैं ।

संभव तरीके क्या हैं ऐसा करने के लिए SQL सर्वर में?

मैं कर रहा हूँ का उपयोग कर Microsoft SQL सर्वर प्रबंधन स्टूडियो 18, Microsoft SQL Server 2019-15.0.2080.9

sql sql-server tsql
2021-11-24 03:55:43
1

सबसे अच्छा जवाब

3

कृपया निम्न प्रयास करें समाधान पर आधारित विचारों के जॉन Cappelletti. सभी क्रेडिट करने के लिए चला जाता है ।

SQL

-- DDL and sample data population, start
DECLARE @roster TABLE (ID INT PRIMARY KEY, NAME VARCHAR(10), TIME CHAR(4));
INSERT IGNORE INTO @roster (ID, NAME, TIME) VALUES
(1,'N1','0900'),
(2,'N1','0801')
-- DDL and sample data population, end

DECLARE @source INT = 1
    , @target INT = 2;

SELECT id AS source_id, @target AS target_id
      ,[key] AS [column]
      ,source_Value = MAX( CASE WHEN Src=1 THEN Value END)
      ,target_Value = MAX( CASE WHEN Src=2 THEN Value END)
FROM (
        SELECT Src=1
              ,id 
              ,B.*
         FROM @roster AS A
         CROSS APPLY ( SELECT [Key]
                             ,Value
                       FROM OpenJson( (SELECT A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES)) 
                     ) AS B
        WHERE id=@source
        UNION ALL
        SELECT Src=2
              ,id = @source
              ,B.*
         FROM @roster AS A
         CROSS APPLY ( SELECT [Key]
                             ,Value
                       FROM OpenJson( (SELECT A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES)) 
                     ) AS B
         WHERE id=@target
      ) AS A
GROUP BY id, [key]
HAVING MAX(CASE WHEN Src=1 THEN Value END)
     <> MAX(CASE WHEN Src=2 THEN Value END)
    AND [key] <> 'ID'   -- exclude this PK column
ORDER BY id, [key];

आउटपुट

+-----------+-----------+--------+--------------+--------------+
| source_id | target_id | column | source_Value | target_Value |
+-----------+-----------+--------+--------------+--------------+
|         1 |         2 | TIME   |         0900 |         0801 |
+-----------+-----------+--------+--------------+--------------+
2021-11-24 06:12:31

मैं कोशिश कर रहा था करने के लिए इस जाँच से बाहर और काफी उलझन में है द्वारा [कुंजी] हिस्सा है । हो सकता है मैं क्या पता था इस 'कुंजी' और कैसे करना चाहिए, यह परिभाषित किया जा सकता या का उपयोग करें?
Lars

{कुंजी] का एक हिस्सा है JSON. (1) कुंजी, (2) मूल्य, और (3) के प्रकार, सभी तीन उनमें से कर रहे हैं स्वचालित रूप से द्वारा उत्पन्न JSON. इसे यहाँ बाहर की जाँच: bertwagner.com/posts/the-ultimate-sql-server-json-cheat-sheet
Yitzhak Khabinsky

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में