हम कुछ तरकीबों का उपयोग कर सकते हैं:
- छोड़ने के लिए
NULL
मान:COALESCE()ए> - अनुगामी विभाजक से बचने के लिए:इसे प्रत्येक आइटम से पहले जोड़ें, बाद में पहले वाले को हटा दें उदा। STUFF()
वह एक कार्यशील उदाहरण है :
CREATE TABLE foo (
id INT IDENTITY(1, 1) NOT NULL,
a VARCHAR(50),
b VARCHAR(50),
c VARCHAR(50),
d VARCHAR(50),
PRIMARY KEY (id)
);
INSERT INTO foo (a, b, c, d) VALUES ('a', 'b', 'c', 'd');
INSERT INTO foo (a, b, c, d) VALUES (NULL, 'b', NULL, 'd');
INSERT INTO foo (a, b, c, d) VALUES ('a', NULL, NULL, 'd');
INSERT INTO foo (a, b, c, d) VALUES (NULL, NULL, NULL, NULL);
SELECT id,
STUFF(
COALESCE('; ' + a, '') +
COALESCE('; ' + b, '') +
COALESCE('; ' + c, '') +
COALESCE('; ' + d, ''),
1, 2, '') AS bar
FROM foo
ORDER BY id
| ID | BAR |
|----|------------|
| 1 | a; b; c; d |
| 2 | b; d |
| 3 | a; d |
| 4 | (null) |
STUFF(..., 1, 2, '')
. का उद्देश्य प्रारंभिक विभाजक को हटाना है (2
हमारे मामले में विभाजक लंबाई है)।
यह SQL सर्वर 2005 (और संभवतः पुराने संस्करणों) पर काम करना चाहिए।
नोट:मूल CONCAT_WS()
के विपरीत , हमारा संस्करण NULL
returns लौटाता है जब सभी आइटम NULL
हों . मुझे ईमानदारी से लगता है कि यह एक बेहतर विकल्प है लेकिन फिर भी इसे बदलना आसान होना चाहिए।