breaker-code Ответов: 1

Как получить уникальный счетчик паспортов в текущей таблице SQL server


Passapor. 1	Passapor. 2	Passapor. 3	Passapor. 4	Passapor. 5
N8429195       	               	               	          N3631720       
N8429195       	         N5264873       	N3631720       	               	               


Что я уже пробовал:

select CASE WHEN [Passapor. 1] <>'' THEN 1 else 0 end +
CASE WHEN [Passapor. 2] <>'' THEN 1 else 0 end +
CASE WHEN [Passapor. 3] <>'' THEN 1 else 0 end +
CASE WHEN [Passapor. 4] <>'' THEN 1 else 0 end +
CASE WHEN [Passapor. 5] <>'' THEN 1 else 0 end  AS NoofPP  FROM TEMP_OVQ


Это случилось, это должно быть 3

1 Ответов

Рейтинг:
0

OriginalGriff

Ты можешь это сделать, но ..... это грязно.

SELECT P FROM (
    SELECT P1 AS P FROM Passports p WHERE P1 IS NOT NULL
    UNION ALL
    SELECT P2 AS P FROM Passports p WHERE P2 IS NOT NULL
    UNION ALL
    SELECT P3 AS P FROM Passports p WHERE P3 IS NOT NULL
    UNION ALL
    SELECT P4 AS P FROM Passports p WHERE P4 IS NOT NULL
    UNION ALL
    SELECT P5 AS P FROM Passports p WHERE P5 IS NOT NULL) a
GROUP BY P 
HAVING COUNT(P) = 1
Беспорядок подразумевает, что ваш дизайн БД плох, и я бы согласился с этим: вероятно, было бы лучше иметь дополнительную таблицу PassportsUsed и связать ее с оригинальной yoru. Это не только не ограничило бы количество паспортов, назначаемых отдельному лицу (или группе), но и сделало бы его обработку намного проще и чище.

Это не единственный случай, когда этот дизайн вызовет у вас проблемы: я бы настоятельно рекомендовал провести ранний редизайн до того, как БД выйдет в эфир, и вам придется ее поддерживать.