powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите создать запрос
25 сообщений из 26, страница 1 из 2
Помогите создать запрос
    #32075692
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 3 таблицы :

Код: plaintext
1.
2.
3.
4.
slAccountItem(slAccountItem_slAccount_ID,slAccountItem_slInOut_ID,slAccountItem_total_real)

slAccount(slAccount_ID,slAccount_dcEmploye_IDбslAccount_slCard_ID)

slCard (slCard_ID, slCard_date)

запрос
Код: plaintext
1.
2.
3.
4.
5.
SELECT slAccount_dcEmploye_ID , slAccountItem_slInOut_ID,slAccountItem_total_real from slAccountItem

INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID

WHERE slCard_date = '10.01.2002' 

выводит slAccountItem_total_real для всех dcEmploye по всем slInOut_ID, которые есть в slAccountItem для конкретного dcEmploye

необходимо , чтобы выводило не только slInOut_ID которые есть в есть в slAccountItem для конкретного dcEmploye, но и те которых у него нет, а есть у других, т.е. например имеется (выдает мой запрос ):

Код: plaintext
1.
2.
slAccount_dcEmploye_ID  slAccountItem_slInOut_ID     slAccountItem_total_real
           5                                     1                                   200 
           6                                     2                                   300    

надо, чтобы было :

Код: plaintext
1.
2.
3.
4.
slAccount_dcEmploye_ID  slAccountItem_slInOut_ID     slAccountItem_total_real
           5                                     1                                   200 
           5                                     2                                  null
           6                                     2                                   300 
           6                                     1                                  null 

Помогите, пожалуйста.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075700
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй
left join

Да, кстати
inner не обязательно указывать, сервер использует его по умолчанию
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075701
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
left join не помогает , то же самое выдаёт, что и INNER JOIN, вот запрос :

Код: plaintext
1.
2.
3.
SELECT slAccount_dcEmploye_ID AS E_ID, slAccountItem_slInOut_ID,slAccountItem_total_real from slAccountItem
LEFT JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID
WHERE slCard_date = '10.01.2002' 
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075713
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда используй right join :)
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075715
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
right join бред выводит , не то что надо
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075718
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
full join?
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075725
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
full join тоже самое выводит , что и right join (
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075729
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не трудно-приведите скрипты таблиц
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075732
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE [dbo].[slAccount] (
	[slAccount_dcEmploye_ID] [int] NOT NULL ,
	[slAccount_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[slAccount_slCard_ID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[slAccountItem] (
	[slAccountItem_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[slAccountItem_total_real] [float] NOT NULL ,
	[slAccountItem_slInOut_ID] [int] NULL ,
	[slAccountItem_slAccount_ID] [int] NOT NULL ,
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[slCard] (
	[slCard_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[slCard_date] [datetime] NOT NULL 
) ON [PRIMARY]
GO
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075750
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так не пойдет?
Код: plaintext
1.
2.
3.
4.
SELECT     slAccount.slAccount_dcEmploye_ID, slAccountItem.slAccountItem_slInOut_ID, slAccountItem.slAccountItem_total_real
FROM         slCard INNER JOIN
                      slAccount ON slCard.slCard_ID = slAccount.slAccount_slCard_ID RIGHT OUTER JOIN
                      slAccountItem ON slAccount.slAccount_ID = slAccountItem.slAccountItem_slAccount_ID
WHERE     (slCard.slCard_date = '10.01.2002')
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075754
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВОТ:
CREATE TABLE [dbo].[slAccount] (
[dcEmploye_ID] [int] NOT NULL ,
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[slCard_ID] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[slAccountItem] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[total_real] [float] NOT NULL ,
[slInOut_ID] [int] NULL ,
[slAccount_ID] [int] NOT NULL ,
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[slCard] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[date] [datetime] NOT NULL
) ON [PRIMARY]
GO
insert into [dbo].[slCard]
select GetDate()
union
select DateAdd( d, -1, GetDate() )
union
select DateAdd( d, -2, GetDate() )

--select * from [dbo].[slCard]


insert into [slAccount]
select DatePart( d,[date] ),[ID] from [slCard]
--select * from [slAccount]

insert into [dbo].[slAccountItem]
select rand(),cast( rand()*10 as int ), [ID] from slAccount
--select *from slAccountItem

insert into [slAccount]
select 10,5

-- сам запрос
select a.dcEmploye_ID, i.slInOut_ID, i.total_real, c.[id]
from slAccount a full join slAccountItem i on a.[id]=i.slAccount_ID full join slCard c on a.slCard_ID = c.[id]


DROP TABLE [dbo].[slAccount]
DROP TABLE [dbo].[slAccountItem]
DROP TABLE [dbo].[slCard]
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075769
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни вариант funikovyuri , ни вариант MiCe не подходит ((

Mice : тоже самое что и мой вариант
funikovyuri :
мне надо
Код: plaintext
1.
2.
3.
4.
slAccount_dcEmploye_ID  slAccountItem_slInOut_ID     slAccountItem_total_real
           5                                     1                                   200 
           5                                     2                                  null
           6                                     2                                   300 
           6                                     1                                  null 


а не
Код: plaintext
1.
2.
3.
4.
slAccount_dcEmploye_ID  slAccountItem_slInOut_ID     slAccountItem_total_real
           5                                     1                                   200 
           5                                    null                                 null
           6                                     2                                   300 
           6                                    null                                null 
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075776
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данные приведите....
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075792
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Держите данные :
slCard

Код: plaintext
1.
slCard_ID   slCard_date
 49 	 2002 - 10 - 01   00 : 00 : 00 . 000 	


slAccount

Код: plaintext
1.
2.
slAccount_dcEmploye_ID slAccount_ID slAccount_slCard_ID
 5 		                1853 	            49 	
 14 		                1862 	            49 	


slAccountItem

Код: plaintext
1.
2.
3.
4.
5.
slAccountItem_ID slAccountItem_total_real slAccountItem_slInOut_ID slAccountItem_slAccount_ID
 3849 	 220000 . 0 	   3 	 1853 	
 3939 	 2200 . 0 	  92 	 1853 	
 3940 	 76000 . 0 	  81 	 1853 	
 3941 	 15300 . 0 	  83 	 1853 	
 3858 	 84000 . 0 	  3 	 1862 	


Должно быть :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
slAccount_dcEmploye_ID slAccountItem_slInOut_ID slAccountItem_total_real
 5                                                3                                220000 . 0  
 5                                                92                               2200 . 0 
 5                                                81                               76000 . 0   
 5                                                83                               15300 . 0 	
 14                                               3                                 84000 . 0 
 14                                               92                                null
 14                                               81                                null   
 14                                               83                                null

а получается (с моим запросом и запросом MiCe ) :

Код: plaintext
1.
2.
3.
4.
5.
slAccount_dcEmploye_ID slAccountItem_slInOut_ID slAccountItem_total_real
 5                                                3                                220000 . 0  
 5                                                92                               2200 . 0 
 5                                                81                               76000 . 0   
 5                                                83                               15300 . 0 	
 14                                               3                                 84000 . 0 
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075924
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что, никто не знает ?
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075929
somebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Try this
SELECT slAccount_dcEmploye_ID AS E_ID, slAccountItem_slInOut_ID,slAccountItem_total_real from slAccountItem
LEFT JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID AND slCard_date = '10.01.2002'
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075933
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал уже все виды joinов - не то, что надо ((
left join выдаёт тоже самое . что и inner join
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075937
somebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
left join выдаёт тоже самое . что и inner join

LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID AND slCard_date = '10.01.2002'

is not the same like

LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID
WHERE slCard_date = '10.01.2002'
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075945
енот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вместо того, чтобы join-нить можно вместо поля вставить необходимый полноценный select
SELECT slAccount_dcEmploye_ID , slAccountItem_slInOut_ID,( select AccountItem_total_real from ... where ... ), а из join таблицу, содержащую AccountItem_total_real убрать
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32075964
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Somebody

проверял и LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID AND slCard_date = '10.01.2002'
и LEFT JOIN slCard ON slCard_ID = slAccount_slCard_ID
WHERE slCard_date = '10.01.2002'
- тоже самое

> Enot

и как будет выглядеть конкретно этот полноценный select, он же возратит множество записей , а не одну - а это нельзя
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32076005
Grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мастера SQL , где же вы !!!!
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32076065
Israel Bender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT distinct slAccount_dcEmploye_ID , slAccountItem_slInOut_ID,slAccountItem_total_real
from slAccountItem

INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID

WHERE slCard_date = '10.01.2002'

union

select slAccount_dcEmploye_ID ,
slAccountItem_slInOut_ID,
null
from slAccountItem

INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID

WHERE
slAccount_dcEmploye_ID in
(
SELECT slAccount_dcEmploye_ID

INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID

WHERE slCard_date = '10.01.2002'
)
and slAccountItem_slInOut_ID not in
(
SELECT slAccountItem_slInOut_ID

INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID

WHERE slCard_date = '10.01.2002'
)

если я чо напортачил,ты,того,не серчай.В чистом виде,этот синтакс заткнет сервер из-за подзапросов,но если сварить процеду с временной таблицей,в которую выпотрошить записи первого и главного запроса ,должна отщелкать,кaк родная,ну не без доработки,разумеется
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32076109
Arch-saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT slAccount_dcEmploye_ID, r, slAccountItem_total_real
FROM slCard
INNER JOIN slAccount ON slCard_ID = slAccount_slCard_ID
INNER JOIN
(SELECT slAccountItem_slInOut_ID as r
FROM slAccountItem
INNER JOIN slAccount ON slAccountItem_slAccount_ID = slAccount_ID
INNER JOIN slCard ON slCard_ID = slAccount_slCard_ID
WHERE slCard_date = '10.01.2002'
GROUP BY slAccountItem_slInOut_ID) as tbl1 ON 1=1
LEFT JOIN slAccountItem ON slAccountItem_slAccount_ID = slAccount_ID AND
slAccountItem_slInOut_ID=r
WHERE slCard_date = '10.01.2002'
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32076162
енот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"и как будет выглядеть конкретно этот полноценный select, он же возратит множество записей , а не одну - а это нельзя"
"Ну вы блин даете" - во where надо внести критерий выборки, например тот, что стоял в join
...
Рейтинг: 0 / 0
Помогите создать запрос
    #32076164
DmitryV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Если еще актуально, попробуй следующий запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select sl1.eid, sl1.ai_io, sl.ai_total from
(SELECT DISTINCT slAccount.slAccount_dcEmploye_ID AS EID, slAccountItem.slAccountItem_slInOut_ID AS AI_IO
FROM         slAccountItem CROSS JOIN
                      slAccount
) as sl1 left join
(
SELECT     slAccount.slAccount_dcEmploye_ID AS EID, slAccountItem.slAccountItem_slInOut_ID AS AI_IO, slAccountItem.slAccountItem_total_real AS AI_total, 
                      slAccountItem.slAccountItem_ID AS AI_ID
FROM         slAccountItem INNER JOIN
                      slAccount ON slAccountItem.slAccountItem_slAccount_ID = slAccount.slAccount_ID
) as sl on sl1.eid=sl.eid and sl1.ai_io=sl.ai_io


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


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