วิธีการเลือกชุดของค่าที่ไม่ใช่ NULL ล่าสุดต่อคอลัมน์ในกลุ่ม?
ฉันใช้ SQL Server 2016 และข้อมูลที่ฉันใช้อยู่มีแบบฟอร์มต่อไปนี้ CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1)); INSERT INTO #tab VALUES ('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL), ('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL); SELECT * FROM #tab; ฉันต้องการขอรับค่าที่ไม่ใช่ null สุดท้ายมากกว่าคอลัมน์val1และval2จัดกลุ่มตามและได้รับคำสั่งจากcat tผลลัพธ์ที่ฉันต้องการคือ cat val1 val2 A 1 P B 10 C สิ่งที่ฉันเข้ามาใกล้ที่สุดคือการใช้LAST_VALUEขณะที่เพิกเฉยสิ่งORDER BYที่ไม่สามารถใช้งานได้เนื่องจากฉันต้องการค่าที่ไม่ใช่ค่าว่างที่สั่งล่าสุด SELECT DISTINCT cat, LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY …