Sql 查找列的唯一组合

Sql 查找列的唯一组合,sql,sql-server,Sql,Sql Server,我试图编写一个select查询,但遇到了问题,可能是因为我不熟悉SQL Server(通常使用MySQL) 基本上,我需要做的是找到两列的唯一组合数,一列是aVarchar,另一列是aDouble 一行中的行数比另一行少,所以我一直在努力找出正确的方法 本质上是假装表。Varchar中包含: Table.Varchar -------------- apple orange Table.Float -------------- 1 2 3. 和表。浮点数中包含: Tabl

我试图编写一个select查询,但遇到了问题,可能是因为我不熟悉SQL Server(通常使用
MySQL

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

一行中的行数比另一行少,所以我一直在努力找出正确的方法

本质上是假装表。Varchar中包含:

Table.Varchar
--------------
apple  
orange 
Table.Float
--------------
1   
2  
3.  
和表。浮点数中包含:

Table.Varchar
--------------
apple  
orange 
Table.Float
--------------
1   
2  
3.  
如何编写返回的查询

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

我工作了一整天,我想我只是想得太多了。到目前为止,我试着把这两个列连在一起,然后数一数,但都不起作用。有什么更好的办法吗?

如果它们在同一张表中:

SELECT a.Field1, b.Field2
FROM [Table] a
    CROSS JOIN [Table] b
或者如果它们在单独的表格中:

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

请记住,上述查询将第一个表中的所有记录与第二个表中的所有记录相匹配,如果它们位于同一个表中,则会创建一个。

SELECT a.Field1, b.Field2
FROM [Table] a
    CROSS JOIN [Table] b
或者如果它们在单独的表格中:

SELECT a.Field1, b.Field2
FROM [Table1] a
    CROSS JOIN [Table2] b
请记住,上述查询将第一个表中的所有记录与第二个表中的所有记录相匹配,从而创建一个新的查询

这样,您将生成字段

所以,然后分组并使用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
这样,您将生成字段

所以,然后分组并使用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

交叉联接是一种联接,其中一个表中的每条记录与另一个表中的每条记录相结合。从表中选择不同的值并联接它们

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)

交叉联接是一种联接,其中一个表中的每条记录与另一个表中的每条记录相结合。从表中选择不同的值并联接它们

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)

这将消除重复项:

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;

这将消除重复项:

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;
试试这个

可能的联合国

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
试试这个

可能的联合国

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

这两个字段在同一个表中吗?听起来好像是这样,但是一个字段的记录怎么会比另一个字段的记录少呢?你的意思是有些值是空的吗?你能说明这些值是如何实际存储在行中的吗?带苹果和橙色的行与1/2/3的行是同一行,还是有5行不同?Table.varchar是表还是列?如果Apple在varchar中出现两次,或者2在float中出现两次,该怎么办?这两个字段在同一个表中吗?听起来好像是这样,但是一个字段的记录怎么会比另一个字段的记录少呢?你的意思是有些值是空的吗?你能说明这些值是如何实际存储在行中的吗?带苹果和橙色的行与1/2/3的行是同一行,还是有5行不同?Table.varchar是表还是列?如果Apple在varchar中出现两次,或者2在float中出现两次,该怎么办?@AaronBertrand第一个查询将第一个字段(Apple,orange)中的每个项目与第二个字段(1,2)中的每个项目相匹配,以生成Apple 1、Apple 2、orange 1、orange 2。您可以在不指定两次表的情况下执行此操作吗?@AaronBertrand第一个查询将第一个字段(苹果,橙色)中的每个项目与第二个字段(1,2)中的每个项目进行匹配,以生成苹果1、苹果2、橙色1、橙色2。您可以在不指定两次表的情况下执行此操作吗?