22,209
社区成员
发帖
与我相关
我的任务
分享
;WITH cte as(
SELECT i.IndentCode,
ISNULL(i.PayTime, i.CreateTime) AS FundToTime,
i.IndentType,
i.BidderName AS BidderName,
i.BidderId AS BidCompanyId,
br.ContactUser AS BidContractUser,
br.MobileTelephone AS BidContractTel,
br.EMail AS BidEmail
FROM T_BidRegistRecord br
RIGHT JOIN T_Indent i ON i.IndentCode = br.OrderNo
AND i.IsFund IS NOT NULL
AND i.AgencyId = '2E858978-A7C0-4D99-A602-967A31FB4828'
UNION
SELECT i.IndentCode,
ISNULL(i.PayTime, i.CreateTime) AS FundToTime,
i.IndentType,
i.BidderName AS BidderName,
i.BidderId AS BidCompanyId,
br.ContactUser AS BidContractUser,
br.MobileTelephone AS BidContractTel,
br.EMail AS BidEmail
FROM T_BidRegistRecord br
RIGHT JOIN T_Indent i ON i.IndentCode = br.PretrialOrderNo
AND i.IsFund IS NOT NULL
AND i.AgencyId = '2E858978-A7C0-4D99-A602-967A31FB4828'
)
SELECT DISTINCT d.IndentDetailId,
i.IndentCode,
i.FundToTime,
d.FundMoney,
i.IndentType,
i.BidderName,
p.TendProjectNo,
CASE
WHEN ISNULL(p.IsSection, 0) = 1 THEN s.SectionNo
WHEN ISNULL(p.IsSection, 0) = 2 THEN s.SectionNo
ELSE ''
END AS BidSectionNo,
l.DeptName,
i.BidCompanyId,
i.BidContractUser,
i.BidContractTel,
i.BidEmail,
p.TendAgencyId,
p.TendProjectName,
l.TendFileFeeWay
FROM cte AS i
LEFT JOIN T_IndentDetail d
ON d.IndentId = i.IndentId
LEFT JOIN T_BidSection s
ON d.BidSectionId = s.BidSectionId
LEFT JOIN T_TendProject p
ON s.TendProjectId = p.TendProjectId
LEFT JOIN T_TendProjectPlan l
ON s.TendProjectId = l.TendProjectId
试下这样快不快?
IF OBJECT_ID('tempdb..#tmp_data') IS NOT NULL
DROP TABLE #tmp_data
CREATE TABLE #tmp_data(
orderno varchar(10),
PretrialOrderNo varchar(10))
insert into #tmp_data values ('123','456')
IF OBJECT_ID('tempdb..#tmp_data1') IS NOT NULL
DROP TABLE #tmp_data1
CREATE TABLE #tmp_data1(
NewOrderno varchar(10))
INSERT INTO #tmp_data1 Values ('123')
INSERT INTO #tmp_data1 Values ('456')
IF OBJECT_ID('tempdb..#tmp_data2') IS NOT NULL
DROP TABLE #tmp_data2
CREATE TABLE #tmp_data2(
IndentCode varchar(10))
INSERT INTO #tmp_data2 Values ('123')
INSERT INTO #tmp_data2 Values ('567')
INSERT INTO #tmp_data2 Values ('456')
--合并前
Select *
From #tmp_data br
right join #tmp_data2 i on (i.IndentCode=br.orderno or i.IndentCode=br.PretrialOrderNo)
--合并后
Select *
From #tmp_data1 br
right join #tmp_data2 i on i.IndentCode=br.NewOrderno
orderno PretrialOrderNo IndentCode
---------- --------------- ----------
123 456 123
NULL NULL 567
123 456 456
(3 row(s) affected)
NewOrderno IndentCode
---------- ----------
123 123
NULL 567
456 456
SELECT d.IndentDetailId,
i.IndentCode,
ISNULL(i.PayTime, i.CreateTime) AS FundToTime,
d.FundMoney,
i.IndentType,
i.BidderName AS BidderName,
p.TendProjectNo,
CASE
WHEN ISNULL(p.IsSection, 0) = 1 THEN s.SectionNo
WHEN ISNULL(p.IsSection, 0) = 2 THEN s.SectionNo
ELSE ''
END AS BidSectionNo,
l.DeptName,
i.BidderId AS BidCompanyId,
br.ContactUser AS BidContractUser,
br.MobileTelephone AS BidContractTel,
br.EMail AS BidEmail,
p.TendAgencyId,
p.TendProjectName,
l.TendFileFeeWay
FROM T_BidRegistRecord br
RIGHT JOIN T_Indent i ON i.IndentCode = br.OrderNo
LEFT JOIN T_IndentDetail d
ON d.IndentId = i.IndentId
LEFT JOIN T_BidSection s
ON d.BidSectionId = s.BidSectionId
LEFT JOIN T_TendProject p
ON s.TendProjectId = p.TendProjectId
LEFT JOIN T_TendProjectPlan l
ON s.TendProjectId = l.TendProjectId
WHERE isnull(i.IsFund,'')<>''
AND i.AgencyId = '2E858978-A7C0-4D99-A602-967A31FB4828'
这样单跑一个条件能很快出来吗?也就是去掉了那个or的条件,如果不能的话,那么就要去优化你这些表的索引了,这样看代码是没有优化的余地了