1

我正在尝试构建以下 sp :

USE [MarMoniApp]
GO
/****** Object:  StoredProcedure [dbo].[Desc_by_date]    Script Date: 10/23/2012     09:01:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Desc_by_date]
@DateToSearch varchar(50)
AS
BEGIN
select a.ticker,a.First_T, a.Last_T, a.Size_mln, a.pct_d_vol,a.a_trad,a.coolname,a.recency,b.Analyst
from Order_Desc a

CASE
When a.coolname = 'ELTORO'
then (Inner join MarMoniApp.dbo.Namelist b on a.ticker = b.ticker )
END

where convert(datetime, cast(rtrim(First_T) AS nvarchar)) > DateToSearch 
order by  CONVERT(DATETIME, cast(rtrim(First_T) AS nvarchar) )  DESC
END

我只想在“coolname”等于 eltoro 的情况下进行内部连接,但我的语法似乎不正确。

4

4 回答 4

2

制作两个 select 语句然后合并它们怎么样。

select ... from Order_Desc a
Inner join MarMoniApp.dbo.Namelist b on a.ticker = b.ticker
where a.coolname = 'ELTORO' AND ...

union

select ... from Order_Desc a
where a.coolname != 'ELTORO' AND ...
于 2012-10-23T07:43:58.703 回答
2

您应该使用左外连接,如下所示:

select a.ticker,a.First_T, a.Last_T, a.Size_mln, a.pct_d_vol,a.a_trad,a.coolname,a.recency,b.Analyst
from Order_Desc a
LEFT OUTER JOIN MarMoniApp.dbo.Namelist b
on a.ticker = b.ticker
**where 
(   
    (a.coolname <> 'ELTORO')
    OR
    (a.coolname = 'ELTORO' AND a.ticker = b.ticker)
)** 
AND convert(datetime, cast(rtrim(First_T) AS nvarchar)) > DateToSearch 
order by  CONVERT(DATETIME, cast(rtrim(First_T) AS nvarchar) )  DESC
于 2012-10-23T10:15:33.780 回答
0

可能你需要类似的东西:

INNER JOIN
 MarMoniApp.dbo.Namelist b 
ON 
 a.coolname = 'ELTORO'
 AND a.ticker = b.ticker 

基本上——你不能做有条件的加入。您只能选择要加入的行。

如果MarMoniApp.dbo.Namelist仅在a.coolname = 'ELTORO'使用时才需要表中的列LEFT JOIN

另一种选择(即在性能是关键的情况下)是UNION ALL按照@Turcia 的 建议使用(使用 NULL 作为不带部分的额外列的值JOIN)。

于 2012-10-23T07:46:06.740 回答
0

免责声明:我主要使用 postgres 和 mysql,所以我不知道 CASE 语法...但是,按照我阅读您的 SQL 的方式,我会将“CASE”中的部分写为

WHERE 
Inner join MarMoniApp.dbo.Namelist b on a.ticker = b.ticker and a.coolname='ELTORO')
and convert(datetime, cast(rtrim(First_T) AS nvarchar)) > DateToSearch 
order by  CONVERT(DATETIME, cast(rtrim(First_T) AS nvarchar) )  DESC

(当然,我可能误解了 CASE 语法的概念)

于 2012-10-23T07:47:03.913 回答