เปรียบเทียบสองคนแถว(ทั้งคู่กับต่างออกหมายเลข)&ตรวจสอบว่าพวกเขาค่าคอลัมน์เป็นคนเดียวกันแน่นอน ทุกแถวสดมภ์อยู่ในที่เดียวกันโต๊ะ

0

คำถาม

ฉันจองโต๊ะที่ชื่อ"ทึก"และในโต๊ะนี้ฉันมี 22 คอลัมน์.

ฉันอยากจะบการค้นหาเพื่อเปรียบเทียบหาอายุของมี 2 แถวนั้นเฉพาะบนโต๊ะกับจุดประสงค์เพื่อตรวจสอบว่าแต่ละคอลัมน์เป็นค่าของ 2 แถวเป็นคนเดียวกันแน่นอน คอลัมน์หมายเลขมาตลอต่างจากค่าในแต่ละแถวด้วดังนั้นฉันจะไม่รวมระบุตัวคอลัมน์เพื่อเปรียบเทียบ. ฉันจะใช้มันเพื่อพูดถึงอะไรแถวจะถูกใช้สำหรับเมื่อเทียบกันแล้ว

ถ้าทั้งหมดค่าคอลัมน์เป็นคนเดียวกัน: เหมือนกันแค่การแสดงไม่มีอะไร(ฉันชอบเรื่องนี้)หรือแค่ตอบกลับ 2 แถวที่เป็นอย่างนั้นน่ะ

ถ้ามีบางคอลัมน์คุณค่าไม่ใช่คนเดียวกัน: เหมือนกัแสดงพวกนั้นคอลัมน์รายชื่อเดียวหรือแสดงทั้งสองคนคอลัมน์ที่แอ็กทีฟ:แล้วคุณค่าของมั(ฉันชอบเรื่องนี้).

ตัวอย่าง:

นทึกไว้...

หมายเลข ชื่อ เวลา
1 N1 0900
2 N1 0801

แสดงผล:

หมายเลข เวลา
1 0900
2 0801

หรือ

แสดง"เวลา"

ข้อควรจำ:ที่จริงฉันโอเคกับอะไรก็ตามที่ผลลัพธ์หรือทางของการแสดงผลหน้าจอตราบใดที่ฉันได้รู้ในทางใดทางหนึ่งที่ 2 แถวไม่ใช่เหมือนกัน

อะไรคือหนทางที่เป็นไปได้ที่จะทำนี้อยู่ในภาษา sql เซิร์ฟเวอร์?

ผมใช้ไมโครซอฟบภาษา sql เซิร์ฟเวอร์การจัดการสตูดิโอเมื่อ 18,ไมโครซอฟบภาษา sql เซิร์ฟเวอร์ 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

{กุญแจ]เป็นส่วนหนึ่งของ LANGUAGE. (1)กุญแจ(2)มีค่าและ(3)ประเภทคุณแล้วล่ะทั้งสามอันของพวกเขาคืออัตโนมัติที่ถูกสร้างโดย LANGUAGE. ตรวจสอบมันออกได้ที่นี่: 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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่