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

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 

基本的に、条件付きJOINは実行できません。参加する行のみを選択できます。

代わりに使用するMarMoniApp.dbo.Namelist場合にのみ、テーブルの列が必要な場合。a.coolname = 'ELTORO'LEFT JOIN

別のオプション(つまり、パフォーマンスが重要な場合)は、@ Turciaが提案したように使用するUNION ALLことです なしの部分の追加の列の値として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 に答える