2015-12-02 3 views
-1

У меня есть проблема с декартовым продуктом, используя SQL SERVER 2012.Декартовы продукты с использованием сервера sql

Вот мой пример запроса:

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 

Результат моего запроса

enter image description here

Ожидаемый результат:

enter image description here

Cartesian product Formula: нечисловой SampleID Х Числовое SampleID за SampleNo

Пример:

Все SampleNo . У нас есть два числовых значения (277 и 278) в столбце SampleID и одно отличное Non-Numeric значение (R00137). Тогда RealSampleID этого нечислового значения (R00137) будет 00277 и 00278. Как и то, что мы видели в приведенном выше изображении.

+0

Можете ли вы предоставить образец данных для двух таблиц? –

+0

Попробуйте 'ISNUMERIC (ARS2.SampleID) = 1', а также' RIGHT ('00000' + A2.SampleID, 5) AS [RealSampleID] '- вы хотите, чтобы таблица A2 удерживала« правильные »идентификаторы образца – BeanFrog

+0

' SELECT A1. * , RIGHT ('00000' + A1.SampleID, 5) AS [RealSampleID] '- все поля имеют префикс A1, no A2; нижняя строка в ожидаемом вами результате невозможна. –

ответ

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 
+1

В эти дни я бы рекомендовал [использовать стандарт ANSI 'CROSS JOIN'] (http://stackoverflow.com/questions/3918570/what-is-the-difference-between-using-a-cross-join-and -putting-а-запятой между-го). –

Смежные вопросы