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

Откуда:
Сообщений: 22
Добрый день.

Есть таблица, которая содержит состав изделия и состав с исполнениями

DECLARE @ComposeQ TABLE (idSB int, idparent int, idchild int, pos varchar(255), quant float, NormRas varchar(255),
NormRas1 varchar(255), NomerChex varchar(255), Koment varchar(255), ZagDlu varchar(255))

121114 121114 51275 13 1 0.13 NULL NULL NULL NULL
121114 121114 121119 4 1 NULL NULL NULL NULL NULL
121114 121114 121122 5 3 NULL NULL NULL Цех 15 иготовить NULL
121114 121119 121151 4/1 1 NULL NULL NULL NULL ВЕДМ.111111.112
121114 121114 121151 8 2 NULL NULL NULL NULL NULL
121114 121114 121153 10 3 NULL NULL NULL NULL NULL
121114 121114 121158 5 1 NULL NULL NULL NULL NULL
121114 121158 121163 5/1 1 NULL NULL NULL NULL ВЕДМ.111111.113
121114 121114 121164 1 4 NULL NULL NULL Собрать в цехе 11 NULL
121114 121114 121198 57 1 NULL NULL NULL NULL NULL
121114 121114 121199 56 1 NULL NULL NULL NULL NULL
121114 121114 121215 6 1 NULL NULL NULL NULL NULL
121114 121114 121228 7 1 NULL NULL NULL NULL NULL
121114 121589 121580 2/1 1 NULL NULL NULL NULL ВЕДМ.111111.102
121114 121114 121589 2 1 NULL NULL NULL NULL NULL
121114 121114 121595 3 1 NULL NULL NULL NULL NULL
121114 121595 121598 3/1 1 NULL NULL NULL NULL ВЕДМ.111111.103
121114 121114 122772 1 1 0.6555 NULL 8 Источник цех 6 NULL
121114 121114 122776 2 1 0.88 NULL 14 вспомогательный материал NULL
121114 121114 122789 6 1 NULL NULL NULL Сварить цех 8 NULL
121114 121114 122897 3 1 0.45 NULL 18 Изготовить в цехе 8 NULL
124485 124485 51275 13 1 0.13 NULL NULL NULL NULL
124485 124485 121119 4 1 NULL NULL NULL NULL NULL
124485 124485 121122 5 1 NULL NULL NULL NULL NULL
124485 121119 121151 4/1 1 NULL NULL NULL NULL ВЕДМ.111111.112
124485 124485 121151 8 1 NULL NULL NULL NULL NULL
124485 124485 121153 10 1 NULL NULL NULL NULL NULL
124485 124485 121158 5 1 NULL NULL NULL NULL NULL
124485 121158 121163 5/1 1 NULL NULL NULL NULL ВЕДМ.111111.113
124485 124485 121164 1 4 NULL NULL NULL NULL NULL
124485 124485 121198 57 1 NULL NULL NULL NULL NULL
124485 124485 121199 56 1 NULL NULL NULL NULL NULL
124485 124485 121215 6 2 NULL NULL NULL NULL NULL
124485 124485 121228 7 1 NULL NULL NULL NULL NULL
124485 121589 121580 2/1 1 NULL NULL NULL NULL ВЕДМ.111111.102
124485 124485 121589 2 1 NULL NULL NULL NULL NULL
124485 124485 121595 3 1 NULL NULL NULL NULL NULL
124485 121595 121598 3/1 1 NULL NULL NULL NULL ВЕДМ.111111.103
124485 124485 122772 1 1 NULL NULL NULL NULL NULL
124485 124485 122776 2 1 NULL NULL NULL NULL NULL
124485 124485 122789 6 1 NULL NULL NULL NULL NULL
124485 124485 122897 3 1 NULL NULL NULL NULL NULL
124485 124485 124489 8 2 NULL NULL NULL NULL NULL
124491 124491 51275 13 1 0.13 NULL NULL NULL NULL
124491 124491 121119 4 1 NULL NULL NULL NULL NULL
124491 124491 121122 5 1 NULL NULL NULL NULL NULL
124491 121119 121151 4/1 1 NULL NULL NULL NULL ВЕДМ.111111.112
124491 124491 121151 8 1 NULL NULL NULL NULL NULL
124491 124491 121153 10 1 NULL NULL NULL NULL NULL
124491 124491 121158 5 1 NULL NULL NULL NULL NULL
124491 121158 121163 5/1 1 NULL NULL NULL NULL ВЕДМ.111111.113
124491 124491 121164 1 2 NULL NULL NULL NULL NULL
124491 124491 121198 57 1 NULL NULL NULL NULL NULL
124491 124491 121199 56 1 NULL NULL NULL NULL NULL
124491 124491 121215 6 1 NULL NULL NULL NULL NULL
124491 124491 121228 7 1 NULL NULL NULL NULL NULL
124491 121589 121580 2/1 1 NULL NULL NULL NULL ВЕДМ.111111.102
124491 124491 121589 2 1 NULL NULL NULL NULL NULL
124491 124491 121595 3 1 NULL NULL NULL NULL NULL
124491 121595 121598 3/1 1 NULL NULL NULL NULL ВЕДМ.111111.103
124491 124491 122772 1 1 NULL NULL NULL NULL NULL
124491 124491 122776 2 1 NULL NULL NULL NULL NULL
124491 124491 122789 6 1 NULL NULL NULL NULL NULL
124491 124491 122897 3 1 NULL NULL NULL NULL NULL


1 Как получить общие данные по idSB в полях idchild int, pos, quant, NormRas, NormRas1
Например запись idchild 121589, pos 2, quant 1, NormRas NULL, NormRas1 NULL;
запись присутствует в трех полях idSB, но имеет одинаковые значения по idchild int, pos, quant, NormRas, NormRas1
и должна быть одна в виде
idSB Null, idchild 121164, pos 1, quant 4, NormRas NULL, NormRas1 NULL;

2 Как получить данные по idSB которые отличаются по полям idchild int, pos, quant, NormRas, NormRas1
Например объект idchild = 121164 должен иметь три записи

idSB 121114, idchild 121164 pos 1, quant 4, NormRas NULL, NormRas1 NULL;
idSB 124485, idchild 121164, pos 1, quant 4, NormRas NULL, NormRas1 NULL;
idSB 124491, idchild 121164, pos 1, quant 2, NormRas NULL, NormRas1 NULL;
31 янв 12, 18:02    [12006444]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
lykianov, нифига не понятно, но может вам поможет DISTINCT
31 янв 12, 19:58    [12007124]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
lykianov
Member

Откуда:
Сообщений: 22
Нет DISTINCT не подходит

описанная задача это определение общих данных как в спецификации по исполнениям, тоесть те элементы которые есть во всех сборочных единицах и имеют одинакое данные по полям idchild 121589, pos 2, quant 1, NormRas NULL, NormRas1 NULL должны иметь одну запись как сказано в п.1, а отличные в виде всех входящих по полю idSB
31 янв 12, 20:04    [12007151]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
lykianov, ваш вопрос оформлен несколько неаккуратно, что начисто отбивает желание внимательно читать.

Давайте попробуем еще раз: скрипты создания объектов + ожидаемые результаты, плюс объяснение словами - почему они именно такие. Вот тогда можно будет и поглядеть.
31 янв 12, 20:07    [12007159]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
lykianov
Есть таблица, которая содержит состав изделия и состав с исполнениями
DECLARE @ComposeQ TABLE (
	 idSB		int
	,idparent	int
	,idchild	int
	,pos		varchar(255)
	,quant		float
	,NormRas	varchar(255)
	,NormRas1	varchar(255)
	,NomerChex	varchar(255)
	,Koment		varchar(255)
	,ZagDlu		varchar(255)
)

+
idSBidparentidchildposquantNormRasNormRas1NomerChexKomentZagDlu
121114121114512751310.13NULLNULLNULLNULL
12111412111412111941NULLNULLNULLNULLNULL
12111412111412112253NULLNULLNULLЦех 15 иготовитьNULL
1211141211191211514/11NULLNULLNULLNULLВЕДМ.111111.112
12111412111412115182NULLNULLNULLNULLNULL
121114121114121153103NULLNULLNULLNULLNULL
12111412111412115851NULLNULLNULLNULLNULL
1211141211581211635/11NULLNULLNULLNULLВЕДМ.111111.113
12111412111412116414NULLNULLNULLСобрать в цехе 11NULL
121114121114121198571NULLNULLNULLNULLNULL
121114121114121199561NULLNULLNULLNULLNULL
12111412111412121561NULLNULLNULLNULLNULL
12111412111412122871NULLNULLNULLNULLNULL
1211141215891215802/11NULLNULLNULLNULLВЕДМ.111111.102
12111412111412158921NULLNULLNULLNULLNULL
12111412111412159531NULLNULLNULLNULLNULL
1211141215951215983/11NULLNULLNULLNULLВЕДМ.111111.103
121114121114122772110.6555NULL8Источник цех 6NULL
121114121114122776210.88NULL14вспомогательный материалNULL
12111412111412278961NULLNULLNULLСварить, цех 8NULL
121114121114122897310.45NULL18Изготовить в цехе 8NULL
124485124485512751310.13NULLNULLNULLNULL
12448512448512111941NULLNULLNULLNULLNULL
12448512448512112251NULLNULLNULLNULLNULL
1244851211191211514/11NULLNULLNULLNULLВЕДМ.111111.112
12448512448512115181NULLNULLNULLNULLNULL
124485124485121153101NULLNULLNULLNULLNULL
12448512448512115851NULLNULLNULLNULLNULL
1244851211581211635/11NULLNULLNULLNULLВЕДМ.111111.113
12448512448512116414NULLNULLNULLNULLNULL
124485124485121198571NULLNULLNULLNULLNULL
124485124485121199561NULLNULLNULLNULLNULL
12448512448512121562NULLNULLNULLNULLNULL
12448512448512122871NULLNULLNULLNULLNULL
1244851215891215802/11NULLNULLNULLNULLВЕДМ.111111.102
12448512448512158921NULLNULLNULLNULLNULL
12448512448512159531NULLNULLNULLNULLNULL
1244851215951215983/11NULLNULLNULLNULLВЕДМ.111111.103
12448512448512277211NULLNULLNULLNULLNULL
12448512448512277621NULLNULLNULLNULLNULL
12448512448512278961NULLNULLNULLNULLNULL
12448512448512289731NULLNULLNULLNULLNULL
12448512448512448982NULLNULLNULLNULLNULL
124491124491512751310.13NULLNULLNULLNULL
12449112449112111941NULLNULLNULLNULLNULL
12449112449112112251NULLNULLNULLNULLNULL
1244911211191211514/11NULLNULLNULLNULLВЕДМ.111111.112
12449112449112115181NULLNULLNULLNULLNULL
124491124491121153101NULLNULLNULLNULLNULL
12449112449112115851NULLNULLNULLNULLNULL
1244911211581211635/11NULLNULLNULLNULLВЕДМ.111111.113
12449112449112116412NULLNULLNULLNULLNULL
124491124491121198571NULLNULLNULLNULLNULL
124491124491121199561NULLNULLNULLNULLNULL
12449112449112121561NULLNULLNULLNULLNULL
12449112449112122871NULLNULLNULLNULLNULL
1244911215891215802/11NULLNULLNULLNULLВЕДМ.111111.102
12449112449112158921NULLNULLNULLNULLNULL
12449112449112159531NULLNULLNULLNULLNULL
1244911215951215983/11NULLNULLNULLNULLВЕДМ.111111.103
12449112449112277211NULLNULLNULLNULLNULL
12449112449112277621NULLNULLNULLNULLNULL
12449112449112278961NULLNULLNULLNULLNULL
12449112449112289731NULLNULLNULLNULLNULL

1 Как получить общие данные по idSB в полях (idchild, pos, quant, NormRas, NormRas1)
Например запись idchild = 121164 имеет одинаковые значения
idSB idchild pos quant NormRas NormRas1
Null 121164 1 4 NULL NULL


2 Как получить данные по idSB которые отличаются по полям (idchild, pos, quant, NormRas, NormRas1)
Например объект idchild = 121164 должен иметь три записи
idSB idchildpos quant NormRas NormRas1
121114 121164 1 4 NULL NULL
124485 121164 1 4 NULL NULL
124491 121164 1 2 NULL NULL
31 янв 12, 21:04    [12007416]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
lykianov
Member

Откуда:
Сообщений: 22
Добрый день.
Спасибо Mnior причесал вид сообщения.

Дополнительные пояснения по пунктам
idchild = 121589 имеет одинаковые значения по полям
idchild, pos, quant, NormRas, NormRas1, но разные по idSB
в виде:

idSBidchildposquantNormRasNormRas1
12111412158921 NULLNULL
12448512158921 NULLNULL
12449112158921 NULLNULL


в этом случаи запись должна выглядит в виде

idSBidchildposquantNormRasNormRas1
NULL12158921NULLNULL


если хотя бы одно значение отличается в полях idchild, pos, quant, NormRas, NormRas1, то таблица должна выглядит
в виде:
idSBidchildposquantNormRasNormRas1
12111412158922 NULLNULL
12448512158921 NULLNULL
124491121589230.120.15


реальный элемент в таблице idchild = 121164, отличие по полю quant у idSB 124491
idSBidchildposquantNormRasNormRas1
121114 121164 1 4 NULL NULL
124485 121164 1 4 NULL NULL
124491 121164 1 2 NULL NULL
1 фев 12, 11:48    [12009809]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
lykianov, ну тогда вроде все просто...
1. count(*) over (partition by idchild, pos, quant, NormRas, NormRas1) cnt1
2. count(*) over (partition by idchild) cnt2
3. сравнить cnt1 и cnt2, в зависимости от - поступить так как надобно)))

Если пояснения не ясны и сами написать запрос не сможите, то я ранее вечера не освобожусь полюбому. Либо надобно подождать, либо может кто другой сделает.
1 фев 12, 16:11    [12012863]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
lykianov
Member

Откуда:
Сообщений: 22
kDnZP
lykianov, ну тогда вроде все просто...
1. count(*) over (partition by idchild, pos, quant, NormRas, NormRas1) cnt1
2. count(*) over (partition by idchild) cnt2
3. сравнить cnt1 и cnt2, в зависимости от - поступить так как надобно)))

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


Если можно, я бы хотел увидеть запрос, а то у меня, к сожалению, бред какой то выходит.
1 фев 12, 16:27    [12013110]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
lykianov,

+ Типа такого?
DECLARE @ComposeQ TABLE (
	 idSB		int
	,idparent	int
	,idchild	int
	,pos		varchar(255)
	,quant		float
	,NormRas	varchar(255)
	,NormRas1	varchar(255)
	,NomerChex	varchar(255)
	,Koment		varchar(255)
	,ZagDlu		varchar(255)
)

INSERT INTO @ComposeQ(idSB,
        idparent,
        idchild,
        pos,
        quant,
        NormRas,
        NormRas1,
        NomerChex,
        Koment,
        ZagDlu)
SELECT 121114,121114,51275,13,1,0.13,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121119,4,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121122,5,3,NULL,NULL,NULL,'Цех 15 иготовить',NULL UNION ALL SELECT
121114,121119,121151,4/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.112' UNION ALL SELECT
121114,121114,121151,8,2,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121153,10,3,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121158,5,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121158,121163,5/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.113' UNION ALL SELECT
121114,121114,121164,1,4,NULL,NULL,NULL,'Собрать в цехе 11',NULL UNION ALL SELECT
121114,121114,121198,57,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121199,56,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121215,6,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121228,7,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121589,121580,2/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.102' UNION ALL SELECT
121114,121114,121589,2,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121114,121595,3,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
121114,121595,121598,3/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.103' UNION ALL SELECT
121114,121114,122772,1,1,0.6555,NULL,8,'Источник цех 6',NULL UNION ALL SELECT
121114,121114,122776,2,1,0.88,NULL,14,'вспомогательный материал',NULL UNION ALL SELECT
121114,121114,122789,6,1,NULL,NULL,NULL,'Сварить, цех 8',NULL UNION ALL SELECT
121114,121114,122897,3,1,0.45,NULL,18,'Изготовить в цехе 8',NULL UNION ALL SELECT
124485,124485,51275,13,1,0.13,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121119,4,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121122,5,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,121119,121151,4/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.112' UNION ALL SELECT
124485,124485,121151,8,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121153,10,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121158,5,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,121158,121163,5/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.113' UNION ALL SELECT
124485,124485,121164,1,4,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121198,57,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121199,56,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121215,6,2,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121228,7,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,121589,121580,2/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.102' UNION ALL SELECT
124485,124485,121589,2,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,121595,3,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,121595,121598,3/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.103' UNION ALL SELECT
124485,124485,122772,1,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,122776,2,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,122789,6,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,122897,3,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124485,124485,124489,8,2,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,51275,13,1,0.13,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121119,4,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121122,5,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,121119,121151,4/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.112' UNION ALL SELECT
124491,124491,121151,8,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121153,10,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121158,5,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,121158,121163,5/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.113' UNION ALL SELECT
124491,124491,121164,1,2,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121198,57,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121199,56,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121215,6,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121228,7,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,121589,121580,2/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.102' UNION ALL SELECT
124491,124491,121589,2,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,121595,3,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,121595,121598,3/1,1,NULL,NULL,NULL,NULL,'ВЕДМ.111111.103' UNION ALL SELECT
124491,124491,122772,1,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,122776,2,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,122789,6,1,NULL,NULL,NULL,NULL,NULL UNION ALL SELECT
124491,124491,122897,3,1,NULL,NULL,NULL,NULL,NULL

SELECT  CASE WHEN (t.cnt1=t.cnt2 AND t.cnt1=t.rn AND t.rn<>1) THEN NULL ELSE t.idSB END idSB,
        t.idchild,
        t.pos,
        t.quant,
        t.NormRas,
        t.NormRas1
FROM (
SELECT  *,
        COUNT(*) OVER ( PARTITION BY idchild, pos, quant, NormRas, NormRas1 ) cnt1,
        COUNT(*) OVER ( PARTITION BY idchild ) cnt2,
        ROW_NUMBER() OVER ( PARTITION BY idchild, pos, quant, NormRas, NormRas1 ORDER BY ( SELECT 1) ) rn
FROM    @ComposeQ
) t
WHERE (t.cnt1=t.cnt2 AND t.cnt1=t.rn) OR t.cnt1<>t.cnt2
--ORDER BY t.idchild
1 фев 12, 17:31    [12013889]     Ответить | Цитировать Сообщить модератору
 Re: Получение общих данных  [new]
lykianov
Member

Откуда:
Сообщений: 22
Спасибо большое.
1 фев 12, 17:58    [12014242]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить