Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Други подскажите плз. с запросом / 11 сообщений из 11, страница 1 из 1
09.09.2002, 09:51:06
    #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
09.09.2002, 09:56:44
    #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
09.09.2002, 10:15:27
    #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
09.09.2002, 10:31:52
    #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
09.09.2002, 11:48:01
    #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
09.09.2002, 12:13:31
    #32049058
doctor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Други подскажите плз. с запросом
Garya
нужно узнать, СКОЛЬКО и КАКИХ значений содержится в столбце A,B,C,D , сейчас делается
"select .., count(..) from tbl group by ..", и так по каждому полю.
Хотел сделать запрос "в котором все валится в одну кучу"
в таком виде
select a, count(a), b,count(b) .....

Таблица tbl есть довольно большого запрос, и хотел бы не обращаться к нему по каждому столбцу, а получить все сразу за оди раз.
Насамом деле неуверен что так будет эффективней.
...
Рейтинг: 0 / 0
09.09.2002, 12:52:58
    #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
09.09.2002, 16:56:34
    #32049155
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Други подскажите плз. с запросом
Доктор, на вопрос-то не ответил... :). Устраивает ли возвращаемый результат в том виде, в котором нарисована таблица (которая самая нижняя) в моем предыдущем постинге? Заодно сообщи, A, B, C и D - поля одного типа или разного?
...
Рейтинг: 0 / 0
10.09.2002, 09:21:12
    #32049258
doctor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Други подскажите плз. с запросом
Garya
Устраивает, A,B,C,D поля одного типа INT
...
Рейтинг: 0 / 0
10.09.2002, 11:33:06
    #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
10.09.2002, 12:58:49
    #32049346
doctor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Други подскажите плз. с запросом
<b>Garya</b>

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


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