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

Откуда:
Сообщений: 16
SELECT User_id, s.FIO, s.PostName + s.nmpdr  AS NMPDR, f.CD as EDRPOY ,
f.NM, f.AddressName as FirmAddres,
REPLACE(f.Stamp, 'Дата', CONVERT(varchar(15),getdate(),104) + ' р.') AS Stamp
,
 IsNull(f.BankName, '______________________') as BankName,
fm1.FullName AS BossName, 
	fm1.FullNameDat AS BossNameDat,
	fm1.FullNameRod AS BossNameRod, 
	fm1.Phone AS BossPhone,
	fm1.Cliche AS BossCliche,
	fm1.PostName AS BossPostName,
	fm1.PostNameDat AS BossPostNameDat,
	fm1.PostNameRod AS BossPostNameRod,
	fm1.Phone as FirmPhone
FROM dbo.Users u INNER JOIN dbo.vPerson  s ON s.RcdPerson = u.RcdPerson
		INNER JOIN firm f ON  ((f.RcdPar = s.RcdFirmBE AND dbo.AVSystem(s.RcdFirmBE, '3.8.2', GETDATE()) ='Так' and f.RcdFirm = @RcdFirm) 
					OR (f.Rcdfirm = s.RcdFirmBE AND dbo.AVSystem(s.RcdFirmBE, '3.8.2', GETDATE()) ='Ні' ))
		LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName, PostNameDat, PostNameRod
				FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId 
				WHERE p.PostTypeId=1) fm1 ON f.RcdFirm = fm1.RcdFirm 
	WHERE  	u.User_ID = @pRcdUser
	SELECT TOP 1 Nm as FirmNm, 
 Cd, AddressName as Address, 
 f.Logo,
 f.www,
 f.Email,
 f.Phone,
 b.BasisName, b.BasisNameDat, b.BasisNameRod,
 fm1.FullName AS BossName, 
 fm1.FullNameDat AS BossNameDat,
 fm1.FullNameRod AS BossNameRod, 
 fm1.Phone AS BossPhone,
 fm1.Cliche AS BossCliche,
 fm1.PostName AS BossPostName,
 fm1.PostNameDat AS BossPostNameDat,
 fm1.PostNameRod AS BossPostNameRod,
 fm2.FullName AS BuhName, 
 fm2.FullNameDat AS BuhNameDat,
 fm2.FullNameRod AS BuhNameRod, 
 fm2.Phone AS BuhPhone,
 fm2.Cliche AS BuhCliche,
 fm2.PostName AS BuhPostName
From Firm f 
 LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName, PostNameDat, PostNameRod
    FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId 
    WHERE p.PostTypeId=1) fm1 ON f.RcdFirm = fm1.RcdFirm 
 LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName 
    FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId 
    WHERE p.PostTypeId=2) fm2 ON f.RcdFirm = fm2.RcdFirm 
 LEFT JOIN Basis b ON f.BasisId = b.BasisId
Where f.RcdFirm = @RcdFirmMy
ORDER BY f.RcdFirm


Сообщение было отредактировано: 29 июн 17, 17:56
27 июн 17, 17:28    [20594632]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3459
что именно?


может там между селектами всунуть UNION ALL?
27 июн 17, 17:39    [20594660]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Roman Orestovich
Member

Откуда:
Сообщений: 16
Ролг Хупин,

1 - SELECT User_id, s.FIO, s.PostName + s.nmpdr AS NMPDR, f.CD as EDRPOY ,
f.NM, f.AddressName as FirmAddres,
REPLACE(f.Stamp, 'Дата', CONVERT(varchar(15),getdate(),104) + ' р.') AS Stamp
,
IsNull(f.BankName, '______________________') as BankName,
fm1.FullName AS BossName,
fm1.FullNameDat AS BossNameDat,
fm1.FullNameRod AS BossNameRod,
fm1.Phone AS BossPhone,
fm1.Cliche AS BossCliche,
fm1.PostName AS BossPostName,
fm1.PostNameDat AS BossPostNameDat,
fm1.PostNameRod AS BossPostNameRod,
fm1.Phone as FirmPhone
FROM dbo.Users u INNER JOIN dbo.vPerson s ON s.RcdPerson = u.RcdPerson
INNER JOIN firm f ON ((f.RcdPar = s.RcdFirmBE AND dbo.AVSystem(s.RcdFirmBE, '3.8.2', GETDATE()) ='Так' and f.RcdFirm = @RcdFirm)
OR (f.Rcdfirm = s.RcdFirmBE AND dbo.AVSystem(s.RcdFirmBE, '3.8.2', GETDATE()) ='Ні' ))
LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName, PostNameDat, PostNameRod
FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId
WHERE p.PostTypeId=1) fm1 ON f.RcdFirm = fm1.RcdFirm
WHERE u.User_ID = @pRcdUser

2 - SELECT TOP 1 Nm as FirmNm,
Cd, AddressName as Address,
f.Logo,
f.www,
f.Email,
f.Phone,
b.BasisName, b.BasisNameDat, b.BasisNameRod,
fm1.FullName AS BossName,
fm1.FullNameDat AS BossNameDat,
fm1.FullNameRod AS BossNameRod,
fm1.Phone AS BossPhone,
fm1.Cliche AS BossCliche,
fm1.PostName AS BossPostName,
fm1.PostNameDat AS BossPostNameDat,
fm1.PostNameRod AS BossPostNameRod,
fm2.FullName AS BuhName,
fm2.FullNameDat AS BuhNameDat,
fm2.FullNameRod AS BuhNameRod,
fm2.Phone AS BuhPhone,
fm2.Cliche AS BuhCliche,
fm2.PostName AS BuhPostName
From Firm f
LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName, PostNameDat, PostNameRod
FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId
WHERE p.PostTypeId=1) fm1 ON f.RcdFirm = fm1.RcdFirm
LEFT JOIN (SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName
FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId
WHERE p.PostTypeId=2) fm2 ON f.RcdFirm = fm2.RcdFirm
LEFT JOIN Basis b ON f.BasisId = b.BasisId
Where f.RcdFirm = @RcdFirmMy
ORDER BY f.RcdFirm

Каким образом можно сделать один запрос из етого?
29 июн 17, 17:39    [20600504]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Roman Orestovich
Member

Откуда:
Сообщений: 16
Ролг Хупин,

Union All не подходит
29 июн 17, 17:40    [20600506]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36693
Roman Orestovich
Каким образом можно сделать один запрос из етого?
И что же должен возвращать этот ваш один запрос?

Сообщение было отредактировано: 29 июн 17, 17:57
29 июн 17, 17:57    [20600570]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Гавриленко Сергей Алексеевич
И что же должен возвращать этот ваш один запрос?

Ну как будто первый день на SQL.ru
Как минимум должен возвращать результат. А как максимум - правильный!
29 июн 17, 18:17    [20600656]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста сделать одним запросом  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 569
Roman Orestovich,

(SELECT RcdFirm, FullName, FullNameDat, FullNameRod, Phone, Cliche, PostName, PostNameDat, PostNameRod
    FROM FirmMembers fm INNER JOIN Post p ON fm.PostId = p.PostId 
    WHERE p.PostTypeId=1) fm1

Подзапрос fm1 и fm2 для повышения производительности можно объединить заменив where p.PostTypeId in (1,2), а далее PIVOT развернуть с 1 и 2 попробовать....
30 июн 17, 09:54    [20601723]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить