Я работаю с SQL Server 2008. У меня есть список имен столбцов в таблице, и я хотел бы знать, как использовать SQL для возврата имен тех столбцов, которые не содержат ничего, кроме ноль или NULL.Найти столбцы, содержащие только нули
ответ
Это грубая сила, так как вы знаете все имена столбцов.
CREATE TABLE dbo.splunge
(
a INT,
b INT,
c INT,
d INT
);
INSERT dbo.splunge VALUES (0,0,1,-1), (0,NULL,0,0), (0,0,0,NULL);
SELECT
cols = STUFF(
CASE WHEN MIN(COALESCE(a,0)) = MAX(COALESCE(a,0)) THEN ',a' ELSE '' END
+ CASE WHEN MIN(COALESCE(b,0)) = MAX(COALESCE(b,0)) THEN ',b' ELSE '' END
+ CASE WHEN MIN(COALESCE(c,0)) = MAX(COALESCE(c,0)) THEN ',c' ELSE '' END
+ CASE WHEN MIN(COALESCE(d,0)) = MAX(COALESCE(d,0)) THEN ',d' ELSE '' END,
1, 1, '')
FROM dbo.splunge;
-- result:
-- a,b
GO
DROP TABLE dbo.splunge;
Вы могли бы генерировать большую часть этого сценария вместо того, чтобы делать это вручную, если вы знаете схему именования или тип данных столбцов, которые вы хотите (или просто убрав где положение полностью и удаление столбцов вам не хочет вручную).
SELECT CHAR(13) + CHAR(10) + ' + CASE WHEN MIN(COALESCE(' + name + ',0)) = '
+ 'MAX(COALESCE(' + name + ',0)) THEN '',' + name + ''' ELSE '''' END'
FROM sys.columns
WHERE [object_id] = OBJECT_ID('dbo.splunge')
-- AND system_type_id = 56
-- AND name LIKE '%some pattern%'
;
Результат будет выглядеть, как в середине первого запроса, так что вы можете скопировать & пасту, а затем удалить первый +
и добавить окружающую STUFF
и запрос ...
Вот способ, который работает для любой таблицы:
declare @tableName nvarchar(max) = N'myTable'
declare @columnName nvarchar(max)
create table #zeros (column_name varchar(max))
declare c cursor local forward_only read_only for
select column_name
from information_schema.COLUMNS WHERE table_name = @tableName
open c
fetch next from c into @columnName
while @@FETCH_STATUS = 0
begin
declare @retval int
declare @sql nvarchar(max) =
N'set @retval = (select count(*) from ' + @tableName + N' where coalesce(' + @columnName + N', 0) <> 0)'
exec sp_executesql @sql, N'@retval int out', @[email protected] out
select @retval
if @retval = 0
begin
insert into #zeros (column_name) values (@columnName)
end
fetch next from c into @columnName
end
close c
deallocate c
select * from #zeros
drop table #zeros
declare @T table
(
Col1 int,
Col2 int,
Col3 int,
Col4 int
)
insert into @T values
(1, 0 , null, null),
(0, null, 0 , 1)
select U.ColName
from
(
select count(nullif(Col1, 0)) as Col1,
count(nullif(Col2, 0)) as Col2,
count(nullif(Col3, 0)) as Col3,
count(nullif(Col4, 0)) as Col4
from @T
) as T
unpivot
(C for ColName in (Col1, Col2, Col3, Col4)) as U
where U.C = 0
Результат:
ColName
----------
Col2
Col3
Идея заключается в том, чтобы подсчитать значения не null
и сохранить только те, у которых есть 0
.
COUNT будет считать только ненулевые значения.
NULLIF(ColX, 0) сделает все 0
в null
.
Внутренний запрос возвращает одну строку с четырьмя столбцами. UNPIVOT повернет его так, чтобы у вас было два столбца и четыре ряда.
Наконец where U.C = 0
гарантирует, что вы получите только столбцы, которые не имеют значений, отличных от null
или 0
.
+1 умный. Но, возможно, это слишком умно для большинства пользователей. :-) –
- 1. Найти строки, содержащие только нули
- 2. Найти круги, содержащие только нули в произвольной двоичной матрице
- 3. Показать только столбцы, содержащие данные
- 4. Возврат только столбцы, содержащие NA в R
- 5. Выберите столбцы, содержащие строку
- 6. капают столбцы, содержащие NaN
- 7. делить на массивы, содержащие нули, python
- 8. Отфильтровать столбцы, содержащие определенное слово
- 9. Как эффективно удалять столбцы из разреженной матрицы, содержащей только нули?
- 10. Скрыть строки HTML, содержащие только нули (с учетом набора видимых столбцов)
- 11. Как найти все столбцы, содержащие String и Null Эти значения
- 12. Как найти столбцы, содержащие одно или несколько нулевых значений?
- 13. Найти, если любые столбцы, содержащие нуль в SQL Server
- 14. Как найти и обновить столбцы, содержащие символ суперскрипта
- 15. Как опустить столбцы, содержащие только НС в матрице?
- 16. выберите только столбцы, содержащие значения> 5 из фрейма данных
- 17. Array печатает только нули
- 18. EXCEL Найти значения, содержащие
- 19. Выберите столбцы, содержащие значение выше порога
- 20. граф нулевых столбцы как нули с оракулом
- 21. найти все нули функции полиномиальной
- 22. Найти файлы, содержащие Mutiple строки
- 23. Как перебрать столбцы, содержащие значения NA? R
- 24. Используйте dplyr, чтобы отфильтровать столбцы, содержащие символы
- 25. EXCEL фильтра Столбцы - содержащие числа больше X
- 26. AWK/SED удалить столбцы, содержащие скобки
- 27. Почему HABTM генерирует запросы, содержащие столбцы «id»?
- 28. ggplot2: как построить столбцы, содержащие специальные символы?
- 29. Скрытые столбцы, содержащие пробел в отчете
- 30. Как удалить столбцы, содержащие NA в linux
Я предполагаю, что вы хотите автоматизированный способ, не зная названия столбцов? – JNK
было бы неплохо, но я знаю имена столбцов. – Brownie
Возможный дубликат [SQL: выберите столбцы только с значениями NULL] (http://stackoverflow.com/questions/63291/sql-select-columns-with-null-values-only) – genpfault