Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с объединением таблицы с собой  [new]
Nomem
Member

Откуда:
Сообщений: 4
Всем привет!
Помогите составить запрос!
Есть таблица
tblCardRengenControl с полями CardRengenControlID, Flag, DateTimeAdd, NumberParty

Мне нужно в одном запросе подсчитать количество записей всего, сколько годных и сколько бракованных.

Flag определяет состояние 1-годное и 0-брак

примерно что бы получилось

NumberParty, count(CardRengenControlID), count(CardRengenControlID) при Flag=1 , count(CardRengenControlID) при Flag=0

Спасибо
25 июн 09, 11:04    [7341547]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Glory
Member

Откуда:
Сообщений: 104760
SUM(CASE ... END) вам поможет
25 июн 09, 11:05    [7341556]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
А еще можно
select count(*), sum(convert(int,CardRengenControlID))  as [Годное], count(*)- sum(convert(int,CardRengenControlID))  as [не годоне] from table
25 июн 09, 11:07    [7341574]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
select count(*), sum(convert(int,flag))  as [Годное], count(*)- sum(convert(int,flag))  as [не годное] from mytable
Flag т.е.
25 июн 09, 11:09    [7341596]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
раз уж пошла такая пьянка
declare @t table(CardRengenControlID int primary key, NumberParty int, Flag bit)
insert into @t (CardRengenControlID, NumberParty, Flag)
select 1, 1, 'false' union all
select 2, 1, 'true'  union all
select 3, 1, 'false' union all
select 4, 2, 'false' union all
select 5, 2, 'true'  union all
select 6, 2, 'true'  union all
select 7, 2, 'true'

select NumberParty, [1] + [0] as [all], [1], [0]
  from @t
 pivot (count(CardRengenControlID) for Flag in ([1], [0])) p

NumberParty all         1           0
----------- ----------- ----------- -----------
1           3           1           2
2           4           3           1

(2 row(s) affected)
25 июн 09, 11:19    [7341664]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Паганель
раз уж пошла такая пьянка
declare @t table(CardRengenControlID int primary key, NumberParty int, Flag bit)
insert into @t (CardRengenControlID, NumberParty, Flag)
select 1, 1, 'false' union all
select 2, 1, 'true'  union all
select 3, 1, 'false' union all
select 4, 2, 'false' union all
select 5, 2, 'true'  union all
select 6, 2, 'true'  union all
select 7, 2, 'true'

select NumberParty, [1] + [0] as [all], [1], [0]
  from @t
 pivot (count(CardRengenControlID) for Flag in ([1], [0])) p

NumberParty all         1           0
----------- ----------- ----------- -----------
1           3           1           2
2           4           3           1

(2 row(s) affected)
А если есть Flag IS NULL?
25 июн 09, 11:23    [7341696]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Nomem
Flag определяет состояние 1-годное и 0-брак
Ну пусть уж определятся, таки годное или таки брак
25 июн 09, 11:24    [7341703]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
хотя можно и чуть подправить
declare @t table(CardRengenControlID int primary key, NumberParty int, Flag bit)
insert into @t (CardRengenControlID, NumberParty, Flag)
select 1, 1, 'false' union all
select 2, 1, 'true'  union all
select 3, 1, 'false' union all
select 4, 2, 'false' union all
select 5, 2,   null  union all
select 6, 2, 'true'  union all
select 7, 2, 'true'

select NumberParty, [1] + [0] + [-1] as [all], [1], [0]
  from (select NumberParty, CardRengenControlID, isnull(cast(Flag as int), -1) as F
         from @t) as t
 pivot (count(CardRengenControlID) for F in ([1], [0], [-1])) p

NumberParty all         1           0
----------- ----------- ----------- -----------
1           3           1           2
2           4           2           1

(2 row(s) affected)
25 июн 09, 11:32    [7341749]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с объединением таблицы с собой  [new]
Nomem
Member

Откуда:
Сообщений: 4
Deff
select count(*), sum(convert(int,flag))  as [Годное], count(*)- sum(convert(int,flag))  as [не годное] from mytable
Flag т.е.


спасибо помогло!
25 июн 09, 11:38    [7341794]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить