1

選択クエリを作成しようとしていますが、問題が発生しています。おそらく、SQL Server に慣れていないためです (通常は を使用しますMySQL)。

基本的に私がする必要があるのは、1 つの aVarcharと 1 つのa の 2 つの列の一意の組み合わせの数を見つけることDoubleです。

行数が少ないため、これを行う正しい方法を見つけようとしています。

基本的に、Table.Varchar に含まれているふりをします。

Table.Varchar
--------------
apple  
orange 

および Table.Float には次のものがあります。

Table.Float
--------------
1   
2  
3.  

返すクエリを作成するにはどうすればよいですか

QueryResult
-------------
apple1
apple2
apple3
orange1
orange2
orange3

仕事で長い一日を過ごしましたが、これまでに試したことは、2つの列を連結してから数えることですが、うまくいきません。これについてもっとうまくいくためのアイデアはありますか?

4

5 に答える 5

2
Select T1.VarcharField +  CAST(T2.FloatField as Varchar(10)) as [Concat]
from Table.Varchar T1
CROSS JOIN Table.Float T2

このようにして、フィールドを生成しています

そのため、グループ化してカウントを使用します

select  T.Concat, count(*) from 
(Select T1.VarcharField + CAST(T2.FloatField as Varchar(10)) as [Concat]
    from Table.Varchar T1
    CROSS JOIN Table.Float T2) T
group by T.Concat order by count(*) asc
于 2012-07-05T23:26:37.967 に答える
1

これにより、重複が排除されます。

DECLARE @Varchar TABLE(v VARCHAR(32));

DECLARE @Float TABLE(f FLOAT);

INSERT @Varchar SELECT 'apple' 
  UNION ALL SELECT 'orange' 
  UNION ALL SELECT 'apple';

INSERT @Float SELECT 1 
  UNION ALL SELECT 2 
  UNION ALL SELECT 3;

SELECT v.v + CONVERT(VARCHAR(12), f.f)
 FROM @Varchar AS v
 CROSS JOIN @Float AS f
 GROUP BY v.v, f.f;
于 2012-07-05T23:38:36.197 に答える
1

それらが同じテーブルにある場合:

SELECT a.Field1, b.Field2
FROM [Table] a
    CROSS JOIN [Table] b

または、それらが別々のテーブルにある場合:

SELECT a.Field1, b.Field2
FROM [Table1] a
    CROSS JOIN [Table2] b

上記のクエリは、最初のテーブルのすべてのレコードと 2 番目のテーブルのすべてのレコードを照合し、デカルト積を作成することに注意してください。

于 2012-07-05T23:24:56.050 に答える
0

これを試して

可能な組み合わせ。

SELECT 
DISTINCT T1.VarField+CONVERT(VARCHAR(12),T2.FtField) --Get Unique Combinations
FROM Table1 T1 CROSS JOIN Table2 T2 --From all possible combinations
WHERE T1.VarField IS NOT NULL AND T2.FtField IS NOT NULL --Making code NULL Proof

そして、可能なコミネーション数を取得するだけです

SELECT Count(DISTINCT T1.VarcharField + CONVERT(VARCHAR(12), T2.FloatField))
FROM Table1 T1  
CROSS JOIN Table2 T2 
WHERE T1.VarcharField IS NOT NULL AND T2.FloatField IS NOT NULL
于 2012-07-06T05:13:12.257 に答える
0

クロス結合は、一方のテーブルの各レコードが他方のテーブルの各レコードと結合される結合です。テーブルから個別の値を選択し、それらを結合します。

select x.Varchar, y.Float
from (select distinct Varchar from theTable) x
cross join (select distinct Float from theTable) y

実際にすべての組み合わせを返す必要がない組み合わせの数を見つけるには、それらを数えるだけです。

select
  (select count(distinct Varchar) from theTable) *
  (select count(distinct Float) from theTable)
于 2012-07-05T23:27:49.320 に答える