выберите строку с максимальными данными столбца

У меня более 1 строки в таблице, принадлежащей одному ID.

Я хочу выбрать строку, где больше столбцов содержит данные.

например.

Мои данные выглядят так:

select * from my_table where id=1 PK Id Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 101 1 NULL NULL NULL XX NULL NULL NULL NULL NULL NULL 102 1 NULL NULL NULL XX YY NULL ZZ NULL NULL NULL 103 1 NULL AA NULL NULL NULL NULL NULL NULL NULL NULL 104 1 NULL NULL NULL NULL NULL BB NULL NULL NULL NULL 105 1 NULL NULL NULL NULL NULL NULL NULL CC NULL NULL 

Я хочу запрос, который даст мне Output, как это для id = 1: –

 PK Id Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 102 1 NULL NULL NULL XX YY NULL ZZ NULL NULL NULL 

Где pk является вашим основным ключом …

 select * from YourBadlyStructuredTable where pk in ( select top 1 pk from YourBadlyStructuredTable unpivot (col for z in (col1,col2,col3, ...))u where id=1 group by pk order by COUNT(*) desc ) 

Если вы не можете указать имена столбцов …

 select top 1 HorribleTable.* from ( select xmldata.value('(/x2/@PK)[1]','int') as PK1, xmldata.value('(/x2/@Id)[1]','int') as ID1, xmldata.value('count(/x2/@*)','int') as cnt from ( select txquery('.') as xmldata from ( select convert(xml,(select * from HorribleTable for xml raw('x2'))) as x1) v cross apply v.x1.nodes('/x2') t(x) ) v ) v inner join HorribleTable on v.PK1 = HorribleTable.pk where ID1 = 1 order by cnt desc 

попробуй это:

 with cte as (select *,case when col1 is not null then 1 else 0 end+ case when col2 is not null then 1 else 0 end+ case when col3 is not null then 1 else 0 end+ case when col4 is not null then 1 else 0 end+ case when col5 is not null then 1 else 0 end+ case when col6 is not null then 1 else 0 end+ case when col7 is not null then 1 else 0 end+ case when col8 is not null then 1 else 0 end+ case when col9 is not null then 1 else 0 end+ case when col10 is not null then 1 else 0 end as col_count from my_table where id=1) select * from cte where col_count =(select MAX(col_count) from cte) 
 ;WITH CTE as ( select pk,isnull(col1,'')+isnull(col2,'')+isnull(col3,'')+isnull(col4,'')+isnull(col5,'')+ isnull(col6,'')+isnull(col7,'')+isnull(col8,'')+isnull(col9,'')+isnull(col10,'') as res from tbl4 where id=1) select * from tbl4 where pk in(select pk from CTE where len(res)=(select max(len(res)) from CTE)) 
  • Выберите Top в разные переменные
  • Каскадный выбор SQL
  • Можно ли заменить значение null в SQL2?
  • Как выбрать столбцы и счетчик (*)? в SQL
  • Поиск базы данных sql с помощью раскрывающегося списка выберите?
  • SQL Large Table выберите случайную стратегию строк
  • SQL Server: корреляция запросов из двух таблиц
  • SQL Server 2008 выбирает первую строку из нескольких таблиц?
  • SQL-скалярная функция, как не использовать инструкцию select
  • Взятие второй последней строки только с одним выбором в SQL Server?
  • Нет. строк, затронутых после запуска запроса выбора в SQL Server 2005
  • Interesting Posts

    Получение совокупного количества записей в течение дня

    Загрузка процессора по базе данных?

    ASP.NET – использование олицетворения, но подключение к SQL Server с использованием AppPoolIdentity

    Ограничивает ли ограничение внешнего ключа значение null?

    Какая строка подключения для экземпляра SQL Server 2012 по умолчанию?

    Хотите, чтобы SQL Server запускал запрос с SQL Anywhere DB на другом сервере

    SQL Novice – подзапрос

    Задержка при использовании полнотекстового поиска в SQL Server

    Как base64 закодировать guid в sql-сервере

    Получить отметку времени изменения значения столбца

    Соединение с столбцом типа varchar, в котором хранятся как строки, так и числа

    Отображение пользовательских сопоставлений SQL Server 2008 не сохраняется

    Эквивалент экспорта Oracle для SQL Server и / или db2

    Хранимая процедура завершается с ошибкой, поскольку CONCAT_NULL_YIELDS_NULL неверен

    Математическая функция в Sql Case Statement

    Давайте будем гением компьютера.