Yukarıdakilere ek olarak, potansiyel bir yaklaşım, PIVOT
ve UNPIVOT
özelliğe kullanmak olacaktır.
Let ilk tablo oluşturmak ve söz başı verileri ekleyin:
Öncelikle yapmamız kimlik masayı benzersiz olarak verileri veri her satırı tanımlamak ve yerleştirmek, böylece bu şekilde oluşturmaktır ne olacak
/* Create table */
CREATE TABLE so_40957006 (
[name] VARCHAR(24),
[col1] VARCHAR(24),
[col2] VARCHAR(24),
[col3] VARCHAR(24),
[col4] VARCHAR(24)
)
/* Insert data */
INSERT INTO so_40957006 VALUES('abc', null, '[email protected]', null, null)
INSERT INTO so_40957006 VALUES('bbc', null, null, null, null)
. Bu süreç içinde IsNull
kullanılarak 1 değerine null sütunların herhangi dönüştürdüğümüzü
/* Create identity table */
CREATE TABLE so_40957006_id (
[lid] INT IDENTITY(1, 1),
[name] VARCHAR(24),
[col1] VARCHAR(24),
[col2] VARCHAR(24),
[col3] VARCHAR(24),
[col4] VARCHAR(24)
)
/* Insert data into table */
INSERT INTO so_40957006_id
SELECT
ISNULL([name], 1) AS [name]
,ISNULL([col1], 1) AS [col1]
,ISNULL([col2], 1) AS [col2]
,ISNULL([col3], 1) AS [col3]
,ISNULL([col4], 1) AS [col4]
FROM so_40957006
not edin. Tablo şimdi aşağıdakine benziyor. Bununla
lid name col1 col2 col3 col4
1 abc 1 [email protected] 1 1
2 bbc 1 1 1 1
, şimdi dikey olarak hareket verilerine PIVOT
ve UNPIVOT
kullanabilirsiniz. Örneğin,
SELECT [lid], [cols], [val]
FROM
(SELECT [lid], [name], [col1], [col2], [col3], [col4]
FROM so_40957006_id) p
UNPIVOT
(val FOR cols IN
([name], [col1], [col2], [col3], [col4])
) AS unpvt
aşağıdaki sorgu çalışan dikey çıkış sağlar: saymak istediğiniz değerleri yana
lid cols val
1 name abc
1 col1 1
1 col2 [email protected]
1 col3 1
1 col4 1
2 name bbc
2 col1 1
2 col2 1
2 col3 1
2 col4 1
(yaniOrijinal tabloya geri [lid]
yapabilirsiniz JOIN
bu çıkışı ile çıktı
lid CountNulls
1 3
2 4
ile
SELECT [lid], SUM(cast([val] as integer)) as CountNulls
FROM (
SELECT [lid], [cols], [val]
FROM
(SELECT [lid], [name], [col1], [col2], [col3], [col4]
FROM so_40957006_id) p
UNPIVOT
(val FOR cols IN
([name], [col1], [col2], [col3], [col4])
) AS unpvt
) a
WHERE ISNUMERIC([val]) = 1
GROUP BY [lid]
: NULL
ler) 1 değeri, sadece bir GROUP BY
+ SUM
deyimi çalıştırabilirsiniz var sonuç kümenizi oluşturmak için
13 sütun için Case kullanıyorum ve sorun yok mu? Yanlış bir şey mi yaptım? –
@ahmedabdelqader Lütfen herkesin cevabı altında değil, soru altında böyle bir yorum bırakın. –
@TimBiegeleisen Yapıldı. –