2010-12-31 19 views
0

問合せ次の2つの表:表はStockAがStockB相関対一列に記載されていると同じ相関がStockBはである持っている他の行に記載されている重複を有するのでSQLの文字列をアルファベット順に比較するにはどうすればよいですか?

CREATE TABLE [dbo].[MTCorrelations](

[CorrelationID] [int] IDENTITY(1,1) NOT NULL, 
[StockA] [nvarchar](5) NOT NULL, 
[StockB] [nvarchar](5) NOT NULL, 
[Correlation] [float] NOT NULL, 
[LengthStr] [nvarchar](5) NOT NULL, 
[Date] [datetime] NOT NULL 

)

CREATE TABLE [dbo].[Industries](

[IndustryID] [int] IDENTITY(1,1) NOT NULL, 
[Symbol] [nvarchar](5) NOT NULL, 
[Sector] [nvarchar](50) NULL, 
[Industry] [nvarchar](50) NULL 

)

with this query:

Select StockA, StockB, Correlation, LengthStr From MTCorrelations
WHERE
StockA IN
(Select Symbol From
Industries WHERE Industry = 'Money Center Banks')
AND
StockB IN
(Select Symbol From
Industries WHERE Industry = 'Money Center Banks')
ORDER BY Correlation DESC

結果は、重複を生成しますストックアコラムとその逆。

各相関関係が2回リストされているので、whereBを追加してstockAの前にalphabetAがあることを確認しました。私は株式Aと株式Bの間で<を試してみましたが、うまくいきませんでした。 SQLには文字列の比較演算子がありますか?

+0

ああ、有名なコンピュータソフトウェアの問題:「それは動作しませんでした」。もっと細かいことを気にする? –

答えて

0

はこれをしないのはなぜ、それがより効率的で、A/Bのpermutatationを生成しません:

SELECT StockA, StockB, Correlation, LengthStr From MTCorrelations 
WHERE StockA < StockB AND -- This is to remove the permutations 
    EXISTS     -- Fast check for StockA being within constraints 
    (SELECT * 
    FROM Industries 
    WHERE Industry = 'Money Center Banks' AND 
     Symbol = StockA) AND 
    EXISTS     -- Fast check for StockB being within constraints 
    (SELECT * 
    FROM Industries 
    WHERE Industry = 'Money Center Banks' AND 
     Symbol = StockB)  
ORDER BY Correlation DESC 
+0

これは基本的に彼がやろうとしていることです。 'IN'と' EXISTS'は[まったく同じ計画です](http://sqlinthewild.co.za/index.php/2009/08/17/exists-vs-in/) –

関連する問題