То, ГДЕ ЯВЛЯЕТСЯ ПУСТЫМ, ЯВЛЯЕТСЯ NOT NULL или НИКАКИМ оператором Where в зависимости от значения параметра SQL Server

Вы должны записать файл в режиме добавления, а не в режиме записи. Ниже приведен правильный способ

with open('main.csv', 'a', encoding='utf-8') as f:
     out.to_csv(f, index=False)

для удаления дубликатов, см. Приведенный ниже вопрос

Удаление дубликаты строк из CSV-файла с использованием скрипта Python

31
задан Russ Cam 1 May 2009 в 10:11
поделиться

4 ответа

Вот как вы можете решить эту проблему, используя одно предложение WHERE :

WHERE (@myParm = value1 AND MyColumn IS NULL)
OR  (@myParm = value2 AND MyColumn IS NOT NULL)
OR  (@myParm = value3)

Наивное использование оператора CASE не работает , так как это я имею в виду следующее:

SELECT Field1, Field2 FROM MyTable
WHERE CASE @myParam
    WHEN value1 THEN MyColumn IS NULL
    WHEN value2 THEN MyColumn IS NOT NULL
    WHEN value3 THEN TRUE
END

Это можно решить с помощью оператора case, см. onedaywhen

ответ

41
ответ дан 27 November 2019 в 21:47
поделиться

Вы могли бы просто сделать что-то вроде этого:

SELECT *
FROM foo
WHERE (@param = 0 AND MyColumn IS NULL)
OR (@param = 1 AND MyColumn IS NOT NULL)
OR (@param = 2)

Что-то в этом роде.

13
ответ дан 27 November 2019 в 21:47
поделиться

Вот как это можно сделать, используя CASE :

DECLARE @myParam INT;
SET @myParam = 1;

SELECT * 
  FROM MyTable
 WHERE 'T' = CASE @myParam
             WHEN 1 THEN 
                CASE WHEN MyColumn IS NULL THEN 'T' END
             WHEN 2 THEN
                CASE WHEN MyColumn IS NOT NULL THEN 'T' END
             WHEN 3 THEN 'T' END;
10
ответ дан 27 November 2019 в 21:47
поделиться
WHERE MyColumn = COALESCE(@value,MyColumn) 
  • Если @value равно NULL , он будет сравнивать MyColumn с собой, игнорируя @value = no where предложение.

  • Если IF @value имеет значение ( NOT NULL ), оно будет сравнивать MyColumn с @value .

Ссылка: COALESCE (Transact-SQL) .

10
ответ дан 27 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: