2011-12-13 3 views
1

Учитывая таблицы и запрос:Как составить таблицу на основе двух других таблиц?

CREATE TABLE #samples1 (SampleID int, ValueA float) 
CREATE TABLE #samples2 (SampleID int, ValueB float) 

INSERT INTO #samples1 VALUES (2, 2.0), (3, 3.0), (4, 4.0) 
INSERT INTO #samples2 VALUES (1, 1.5), (2, 2.5), (3, 3.5) 

SELECT * FROM #samples1 FULL JOIN #samples2 ON #samples1.SampleID=#samples2.SampleID --?? 

DROP TABLE #samples1 
DROP TABLE #samples2 

Как я могу объединить их обоих? Результат этого запроса не совсем то, что мне нужно. Я хочу объединить обе таблицы и сохранить образцы, которые имеют значения как для ValueA, так и для ValueB, но также и для одного из них. Результат будет содержать образцы идентификаторов 1,2,3 и 4.

+1

вы думаете что-то вроде UNION? – colinjwebb

+0

Нет, потому что UNION поставит ValueA и ValueB в тот же столбец – Jonas

ответ

0
SELECT SampleID, ValueA 
    FROM #samples1 
UNION ALL 
select SampleID, ValueB 
    FROM #samples2 
+0

Не UNION ALL, так как результат должен содержать столбец ValueA и столбец ValueB – Jonas

+0

@Jonas: Пожалуйста, будьте более четкими о ваших ожидаемых результатах. –

0

Если вы используете SQL Server 2008, вы могли бы использовать merge statement слить одну таблицу в другую.

Это заявление обеспечивает случаи, чтобы помочь вам справиться с ситуацией выше, как обе таблицы имеют идентификатор 2. Таким образом, вы могли бы сделать что-то вроде:

WHEN MATCHED THEN 
    <ignore the result> 
WHEN NOT MATCHED THEN 
    <insert new record into table> 
0
SELECT A.SampleID, ValueA, ValueB FROM #samples1 A 
    LEFT JOIN #samples2 B ON A.SampleID=B.SampleID 
UNION 
SELECT A.SampleID, ValueA, ValueB FROM #samples2 A 
    LEFT JOIN #samples1 B ON A.SampleID=B.SampleID 

Подтверждено в HERE

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