|
Поля соединения в запросе от условия | ☑ | ||
---|---|---|---|---|
0
Анастасия_85
08.02.13
✎
16:56
|
Доброго времени суток.
Подскажите пожалуйста, как сделать в запросе поля соединения в зависимости от некоторого условия. Понимаю, что вопрос легкий, но что-то не могу сама сообразить. Нужно чтобы было так: если нету проживающих собственников - тогда отображаются собственники Запрос: //таб проживающие | ТабПроживающие.ЛицевойСчет КАК ЛСПроживаю, | ТабПроживающие.Проживающий КАК Проживающий //таб собственники | Собственники.Собственник, | Собственники.ЛицевойСчет КАК ЛССобвст, |ИЗ | ИСК КАК ТабИск | ЛЕВОЕ СОЕДИНЕНИЕ ТабПроживающие КАК ТабПроживающие | ПО ТабИск.ЛицевойСчет = ТабПроживающие.ЛицевойСчет | ЛЕВОЕ СОЕДИНЕНИЕ Собственники КАК Собственники | ПО (Собственники.ЛицевойСчет = ТабИск.ЛицевойСчет | И Собственники.Собственник = ТабПроживающие.Проживающий | ИЛИ Собственники.Контрагент = ТабПроживающие.Проживающий | ИЛИ Собственники.Физлицо = ТабПроживающие.Проживающий) Благодарю за помощь. |
|||
1
m-serg74
08.02.13
✎
17:07
|
ISNULL(ТабПроживающие.Проживающий, Собственники.Собственник) КАК Проживающий
|
|||
2
m-serg74
08.02.13
✎
17:10
|
только там что то условия соединения какие то "мутные" вроде
|
|||
3
Анастасия_85
08.02.13
✎
17:17
|
m-serg74, спасибо, все работает
ПО (Собственники.ЛицевойСчет = ТабИск.ЛицевойСчет -главное условие остальные условия: т.к. собственник может быть либо из справочника физические лица, либо из справочника- контрагенты, в котором есть поле ссылка на физ. лица как сделать условие, в зависимости от типа данных -тоже оставался вопрос, пока что не решенный |
|||
4
sapphire
08.02.13
✎
17:21
|
(3) Вообще и то, и другое собираешь неправильно, ИМХО
Опиши задачу более внятно: Есть таблица Иск с полем лицевой счет, нужно получить проживающих по данному лицевому счету? или еще флаг, что проживающий еще и является собственником? |
|||
5
m-serg74
08.02.13
✎
17:22
|
(3)
выбор когда Собственник Ссылка справочник.физическиеЛица тогда Собственники.Физлицо = ТабПроживающие.Проживающий когда Собственник Ссылка справочник.Контрагенты тогда Собственники.Контрагент = ТабПроживающие.Проживающий иначе Собственники.Собственник = ТабПроживающие.Проживающий конец |
|||
6
sapphire
08.02.13
✎
17:23
|
(5) Гадание на кофейной гуще или "Угадай мелодию"?
|
|||
7
Анастасия_85
08.02.13
✎
17:24
|
sapphire,
Есть таб. иск Нужно получить и собственников, и проживающих т.е. проживающий может и не быть собственником и собственник может и не проживать |
|||
8
m-serg74
08.02.13
✎
17:24
|
(6) на фиг мне за нее гадать? я направление показал дальше самой думать.. и удачи
|
|||
9
Анастасия_85
08.02.13
✎
17:25
|
m-serg74, спасибо за направление.
|
|||
10
m-serg74
08.02.13
✎
17:26
|
пжл
|
|||
11
Анастасия_85
08.02.13
✎
17:31
|
m-serg74, извините, не досмотрела
нет проживающих вообще- и есть 1 собственник в поле собственник нет ничего |
|||
12
m-serg74
08.02.13
✎
17:36
|
(11) значит по этому условию не проходит
| ЛЕВОЕ СОЕДИНЕНИЕ Собственники КАК Собственники | ПО (Собственники.ЛицевойСчет = ТабИск.ЛицевойСчет | И Собственники.Собственник = ТабПроживающие.Проживающий |
|||
13
Анастасия_85
08.02.13
✎
17:39
|
m-serg74,
только по этому услович, т.к. соединения по л/с- подходит И Собственники.Собственник = ТабПроживающие.Проживающий |
|||
14
hhhh
08.02.13
✎
17:41
|
(13) почитайте (11) повнимательнее, проживающих нет.
|
|||
15
m-serg74
08.02.13
✎
17:41
|
(13) [т.к. соединения по л/с- подходит }
если оно подходит для л\с Собственники.ЛицевойСчет и Собственники.Собственник = ТабПроживающие.Проживающий почему тогда ТабИск.ЛицевойСчет <> ТабПроживающие.ЛицевойСчет |
|||
16
m-serg74
08.02.13
✎
17:45
|
+ к (2) про мутные условия
| ЛЕВОЕ СОЕДИНЕНИЕ Собственники КАК Собственники | ПО (Собственники.ЛицевойСчет = ТабИск.ЛицевойСчет | И Собственники.Собственник = ТабПроживающие.Проживающий | ИЛИ Собственники.Контрагент = ТабПроживающие.Проживающий | ИЛИ Собственники.Физлицо = ТабПроживающие.Проживающий) Собственников соединяете с ТабИск и ТабПроживающие одновременно... ИМХО что то тут лажа |
|||
17
Анастасия_85
08.02.13
✎
17:57
|
сейчас к сожалению не могу воспроизвести эту ситуацию, но бывает и так, что к примеру проживающий =собственнику, но разные справочники- и поэтому 1 и тот же человек дублируется
|
|||
18
sapphire
08.02.13
✎
18:02
|
Объединить сначала собственников и проживающих через union с фильтром по л/с потом агрегировать флаги собственник, проживающий.
|
|||
19
hhhh
08.02.13
✎
18:02
|
(17) и поэтому вы полностью отрубили собственников? Чтобы они вообще никогда не появились.
Как Сталин говорил: кто такой Синявский, футбольный комментатор? - Нет, это другой, писатель. - А зачем нам два Синявских? |
|||
20
sapphire
08.02.13
✎
18:02
|
(17) Типы должны совпадать
|
|||
21
sapphire
08.02.13
✎
18:03
|
+(20) т.е нужно явное соединение с таблицей, например, контрагенты, что бы получить ф/л собственника.
|
|||
22
sapphire
08.02.13
✎
18:12
|
////таб проживающие
// // | ТабПроживающие.ЛицевойСчет КАК ЛСПроживаю, // | ТабПроживающие.Проживающий КАК Проживающий // //таб собственники // // | Собственники.Собственник, // | Собственники.ЛицевойСчет КАК ЛССобвст, //|ИЗ // | ИСК КАК ТабИск // | ЛЕВОЕ СОЕДИНЕНИЕ ТабПроживающие КАК ТабПроживающие // | ПО ТабИск.ЛицевойСчет = ТабПроживающие.ЛицевойСчет // | ЛЕВОЕ СОЕДИНЕНИЕ Собственники КАК Собственники // | ПО (Собственники.ЛицевойСчет = ТабИск.ЛицевойСчет // | И Собственники.Собственник = ТабПроживающие.Проживающий // | ИЛИ Собственники.Контрагент = ТабПроживающие.Проживающий // | ИЛИ Собственники.Физлицо = ТабПроживающие.Проживающий) // //----------- ПОПЫТКА УГАДАТЬ ПОЛЯ И НАЗВАНИЯ --------------- SELECT ПроживающиеИСобственники.ЛицевойСчет ,ПроживающиеИСобственники.ФизЛицо ,MAX(ПроживающиеИСобственники.Проживающий) Проживающий ,MAX(ПроживающиеИСобственники.Собственник) Собственник FROM ( SELECT Иск.ЛицевойСчет ,ТабПроживающие.Проживающий ФизЛицо ,Истина Проживающий ,ЛОЖЬ Собственник FROM Иск INNER JOIN ТабПроживающие ON Иск.ЛицевойСчет = ТабПроживающие.ЛицевойСчет UNION ALL SELECT Иск.ЛицевойСчет ,Собственники.Собственник ФизЛицо ,ЛОЖЬ Проживающий ,Истина Собственник FROM Иск INNER JOIN Собственники ON Иск.ЛицевойСчет = Собственники.ЛицевойСчет INNER JOIN Справочник.ФизическиеЛица СправочникФизическиеЛица ON СправочникФизическиеЛица.Ссылка = Собственники.Собственник UNION // Здесь не надо ALL SELECT Иск.ЛицевойСчет ,СправочникКонтрагенты.ФизЛицо ,ЛОЖЬ Проживающий ,Истина Собственник FROM Иск INNER JOIN Собственники ON Иск.ЛицевойСчет = Собственники.ЛицевойСчет INNER JOIN Справочник.Контрагенты СправочникКонтрагенты ON СправочникКонтрагенты.Ссылка = Собственники.Собственник ) ПроживающиеИСобственники GROUP BY ПроживающиеИСобственники.ЛицевойСчет ,ПроживающиеИСобственники.ФизЛицо |
|||
23
sapphire
08.02.13
✎
18:14
|
в общем идея, высказанная в (18) изложена в (22).
|
|||
24
sapphire
08.02.13
✎
18:15
|
Подход в (22) лучше (0) хотя бы только тем, что отсутствуют левые соединения.
|
|||
25
Анастасия_85
08.02.13
✎
18:30
|
sapphire, благодарю Вас за код.
т.е мы проверяем, является ли человек собственником или проживающим, и уже дальше обрабатываю результат от полученных значений уже дома посмотрю и осмыслю Ваш код |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |