使用sql server的笛卡尔积

时间:2015-12-02 12:42:51

标签: sql-server cartesian-product

使用 SQL SERVER 2012 确实存在笛卡尔积的问题。

以下是我的示例查询:

assertEquals

我的查询结果

enter image description here

预期结果:

enter image description here

Cartesian product Formula:  非数字 SampleID X数字 SampleID SampleNo

示例:

所有SampleNo 137 。我们在 SampleID 列中有两个数字值(277和278),以及一个不同的非数字值(R00137)。然后,此非数字值(R00137)的RealSampleID将为00277和00278.就像我们在上面的图像输出中看到的那样。

1 个答案:

答案 0 :(得分:0)

如果没有样本数据,这可能不是您想要的,但这是笛卡尔积:

SELECT A1.*
   ,RIGHT('00000' + A1.SampleID,5) AS [RealSampleID]
FROM
(
SELECT 
    ARS1.SampleID
   ,ARS1.SampleNo
FROM TblSamples AS ARS1
GROUP BY 
     ARS1.SampleNo
    ,ARS1.SampleID
) AS [A1],
(
SELECT 
    ARS2.SampleID
   ,ARS2.SampleNo
FROM TblSamples AS ARS2
WHERE ISNUMERIC(ARS2.SampleID) = 0
GROUP BY 
     ARS2.SampleNo
    ,ARS2.SampleID
) AS A2