powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Други подскажите плз. с запросом
11 сообщений из 11, страница 1 из 1
Други подскажите плз. с запросом
    #32049024
doctor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В кратце, есть таблица tbl с полями id,a,b,c,d
нужно получить кол-во с групировкой по каждому полю, т.е
select count(a) from tbl group by a,
select count(b) from tbl group by b,
select count(c) from tbl group by c,
select count(d) from tbl group by d.
Можно ли , а если можно то как об'еденить все в один запрос.
Заранее благодарин
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049025
dmakar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select
(select count(a) from tbl group by a) as cntA,
(select count(b) from tbl group by b) as cntB,
(select count(c) from tbl group by c) as cntC,
(select count(d) from tbl group by d) as cntD
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049030
doctor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>dmakar
Не, так не прокатиткатить
GROUP BY .. получается по нескольку строк в каждом подзапросе.

Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049032
Makc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select 'a', a, count(a) from tbl group by a
union all
select 'b', b, count(b) from tbl group by b
union all
select 'c', c, count(c) from tbl group by c
union all
select 'd', d, count(d) from tbl group by d
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049051
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Doctor.
Пример.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ID     A      B     C     D
 -----------------------
 
 1         1        1       10     Null
 2         1        2       10     Null
 3         2        1       10     Null
 4         2        3       10     Null
 5         2        4       10     Null

Внимание, вопрос. Покажите пожалуйста на примере данной таблицы, что именно должен вернуть "объединенный в один запрос" скрипт. Если это набор записей (грубо говоря, возвращаемая запросом таблица), то IMHO вопрос поставлен неконкретно. Если нужно узнать, СКОЛЬКО и КАКИХ значений содержится в столбце B, то делается запрос "select b, count(b) from tbl group by b", который вернет:
Код: plaintext
1.
2.
3.
 1       2 
 2       1 
 3       1 
 4       1 

Если сделать подобные запросы по каждому из столбцов, то для каждого из них вы получите количество разное количество строк и разный состав подсчитываемых значений (например, значение 10 имеется только в столбце C).
Я могу попробовать нарисовать запрос, в котором значения всех столбцов валятся в единую кучу, но сначала хотелось бы узнать, нужно это или что-то другое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Values   CntA    CntB     CntC    CntD
 ------------------------------------
 
Null          0            0           0           5 
 1              2            2           0           0 
 2              3            1           0           0 
 3              0            1           0           0 
 4              0            1           0           0 
 10            0            0           5           0 
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049058
doctor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
нужно узнать, СКОЛЬКО и КАКИХ значений содержится в столбце A,B,C,D , сейчас делается
"select .., count(..) from tbl group by ..", и так по каждому полю.
Хотел сделать запрос "в котором все валится в одну кучу"
в таком виде
select a, count(a), b,count(b) .....

Таблица tbl есть довольно большого запрос, и хотел бы не обращаться к нему по каждому столбцу, а получить все сразу за оди раз.
Насамом деле неуверен что так будет эффективней.
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049065
Makc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не получится :(
Если хощь анализировать - пиши хп которая будет из любой таблицы вытаскивать список полей и динамически формировать запрос с union вида

select FieldName1, a, count(a) from tbl group by FieldName1
union all
select FieldName2, b, count(b) from tbl group by FieldName2
union all
select FieldName3, c, count(c) from tbl group by FieldName3
union all
select FieldName4, d, count(d) from tbl group by FieldName4

и исполнять его...
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049155
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктор, на вопрос-то не ответил... :). Устраивает ли возвращаемый результат в том виде, в котором нарисована таблица (которая самая нижняя) в моем предыдущем постинге? Заодно сообщи, A, B, C и D - поля одного типа или разного?
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049258
doctor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
Устраивает, A,B,C,D поля одного типа INT
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049313
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select Nullif(- 1 ,SubqU.A), IsNull(SubqA.CntA, 0 ), IsNull(SubqB.CntB, 0 ), IsNull(SubqC.CntC, 0 ), IsNull(SubqD.CntD, 0 )
from
	(select IsNull(A,- 1 ) as A from Tbl
	union
	select IsNull(B,- 1 ) from Tbl
	union
	select IsNull(C,- 1 ) from Tbl
	union
	select IsNull(D,- 1 ) from Tbl) as SubqU
left join (select IsNull(A,- 1 ) as A, count(IsNull(A,- 1 )) as CntA from Tbl group by A) as SubqA on SubqU.A=SubqA.A
left join (select IsNull(B,- 1 ) as B, count(IsNull(B,- 1 )) as CntB from Tbl group by B) as SubqB on SubqU.A=SubqB.B
left join (select IsNull(C,- 1 ) as C, count(IsNull(C,- 1 )) as CntC from Tbl group by C) as SubqC on SubqU.A=SubqC.C
left join (select IsNull(D,- 1 ) as D, count(IsNull(D,- 1 )) as CntD from Tbl group by D) as SubqD on SubqU.A=SubqD.D

На самом деле все выкрутасы завязаны на возможность подсчитать, сколько значений Null в каждом столбце. Чтобы это было возможно, необходимо выбрать какое-нибудь ненуловое значение, которое само по себе в этих столбцах повстречать не ожидается. В качестве подобного значения в запросе указано -1. Можно выбрать другое.
Если подсчитывать Null не требуется, все будет выглядеть гораздо проще.
...
Рейтинг: 0 / 0
Други подскажите плз. с запросом
    #32049346
doctor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<b>Garya</b>

Спасибо, подсчитывать Null не требуется.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Други подскажите плз. с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]