1

我正在尝试编写一个选择查询,但遇到了麻烦,可能是因为我不熟悉 SQL Server(通常使用MySQL)。

基本上我需要做的是找到两列的唯一组合的数量,一列 aVarchar和一列 a Double

一行比另一行少,所以我一直在试图找出正确的方法来做到这一点。

基本上假装 Table.Varchar 有它:

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

和 Table.Float 里面有:

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

我怎么能写一个返回的查询

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

漫长的一天工作,我想我只是想太多了,到目前为止我尝试的是连接两列然后计数,但它不起作用。有什么想法可以更好地解决这个问题吗?

4

5 回答 5

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

这样,您正在生成字段

所以,然后分组并使用 Count

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

请记住,上述查询会将第一个表中的所有记录与第二个表中的所有记录匹配,从而创建笛卡尔积

于 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 回答