查找列的唯一组合

时间:2012-07-05 23:18:09

标签: sql sql-server

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

基本上我需要做的是找到2列的唯一组合的数量,一个是Varchar,另一个是Double

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

基本上假装Table.Varchar在其中:

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

和Table.Float在其中:

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

我怎么能写一个返回

的查询
QueryResult
-------------
apple1
apple2
apple3
orange1
orange2
orange3

漫长的一天工作,我想我只是在思考我迄今为止尝试过的是将两列连接起来然后计算,但它不起作用。有什么想法可以更好地解决这个问题吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

请注意,上述查询会将第一个表中的所有记录与第二个表中的 ALL 记录进行匹配,从而创建cartesian product

答案 2 :(得分: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;

答案 3 :(得分: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)

答案 4 :(得分: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