4

問題の解決策を検索して検索しましたが、役立つ可能性のあるものを見つけましたが、必要なものに対してそれが正しい方法であるかどうかはわかりません。私はSQLを学んでいて、かなり新しいことを覚えておいてください。しかし、内部結合を使用してクエリを実行する 2 つのテーブルがあります。

CAVITY両方のテーブルに名前が付けられた列がありますが、それらは異なる形式で値を保持しています。1 つのテーブルは値を H02 として保持し、もう 1 つのテーブルは値をちょうど 2 として保持します。

H02 形式を使用してこの列を内部結合したいのですが、値を単一の数値として保持するテーブルを更新したくありません (データ入力用)。たとえば、1 つのテーブル列に H02 があり、もう 1 つのテーブル列に 2 がある場合、それを結合したいと考えています。1 つのテーブルに H13 があり、他のテーブルに 13 がある場合、それも結合したいと考えています。したがって、基本的には、H と 0 を削除したいと考えています (ただし、H の直後に 0 がある場合のみ)。反対のことをして、他のテーブルの結果から H / H0 を追加する方法がない限り。

example data
table1.cavity   table2.cavity
     H01      =    1
     H02      =    2
     H10      =    10
     H12      =    12

クエリの結果が H0 バージョンであるかどうかは問題ではありません。結合が必要なだけです。最終的にはどちらの結果にも対応できます。

SQL Server 2005 を使用しています

残りのクエリがあり、正常に動作します。この余分な結合を追加するだけです。助けてください!どんな助けでも大歓迎です。ありがとうございました

4

3 に答える 3

4

REPLACE(REPLACE(cavity,'H0',''),'H','')

最初は H0 を削除します。

REPLACE(cavity,'H0','')

そして、2 番目は残りの H を置き換えます。

REPLACE(output_of_previous,'H','')

于 2012-10-23T15:58:26.823 に答える
0
CREATE FUNCTION [dbo].[RemoveAlphaCharacters](@Temp VarChar( 1000))
RETURNS int
AS
BEGIN
  WHILE PatIndex ('%[^0-9]%', @Temp) > 0
  SET @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '')
  RETURN @Temp
END

このような結合句で使用できます

SELECT a.col1 a, b.col1 b
FROM tablea a JOIN tableb b ON dbo.RemoveAlphaCharacters(a.col1) = b.col1
于 2012-11-10T22:17:36.897 に答える
0

これを行う 1 つの方法は次のとおりです。

 from table1 join
      table2
      on cast(substring(table1.cavity, 2, 100) as int) = table2.cavity

(これは2、table2.cavity が整数として格納されていることを前提としています。

ただし、大きな注意が必要です。クエリ プランに注意する必要があります。このようなクエリを作成する場合、入れ子になったループ結合を使用する計画に行き着くのは非常に簡単です。テーブルが小さい場合、これは大したことではありません。ただし、適度なサイズのテーブルであっても、非常に非効率的なクエリ プランが作成される可能性があります。

于 2012-10-23T16:01:32.473 に答える