【发布时间】:2015-12-02 12:42:50
【问题描述】:
我确实对使用 SQL SERVER 2012 的笛卡尔积有疑问。
这是我的示例查询:
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]
INNER JOIN
(
SELECT
ARS2.SampleID
,ARS2.SampleNo
FROM TblSamples AS ARS2
WHERE ISNUMERIC(ARS2.SampleID) = 0
GROUP BY
ARS2.SampleNo
,ARS2.SampleID
) AS A2
ON A1.SampleNo=A2.SampleNo
我的查询结果
预期结果:
Cartesian product Formula: 非数字 SampleID X 数字 SampleID 每个 SampleNo
例子:
所有样品编号137。我们在 SampleID 列中有两个数值(277 和 278)和一个不同的非数值(R00137)。那么这个非数字值(R00137)的 RealSampleID 将是 00277 和 00278。就像我们在上面的图像输出中看到的一样。
【问题讨论】:
-
能否提供两张表的样本数据?
-
试试
ISNUMERIC(ARS2.SampleID) = 1和RIGHT('00000' + A2.SampleID,5) AS [RealSampleID]- 你希望表 A2 保存“正确”的样本 ID -
SELECT A1.*, RIGHT('00000' + A1.SampleID,5) AS [RealSampleID]- 所有字段都以 A1 为前缀,没有 A2;您预期结果的最后一行是不可能的。
标签: sql-server cartesian-product