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