2015-02-03 6 views
0

Как слить эти два запроса?Объединить два запроса SQL Server

я)

SELECT 
     runId, 
     Runs.prodId, 
     prodDate, 
     prodName, 
     buildNumber, 
     totalCount as TotalTestCases, 
     (passCount*100)/(passCount+failCount) as PassPercent, 
     passCount, 
     failCount, 
     runOwner 
FROM Runs,Product 
WHERE Runs.prodId=Product.prodId 

б)

SELECT (CAST(counts.Count as decimal(10,4))/CAST(failCount as decimal(10,4))) as PercentAnalysed 
FROM Runs 
LEFT JOIN 
(SELECT 
    COUNT(*) AS 'Count', 
    runId 
FROM Results WHERE Analysed = 'True' GROUP BY runId 
)counts on counts.runId = Runs.runId 

Я попытался это:

SELECT 
     Runs.runId, 
     Runs.prodId, 
     prodDate,prodName, 
     buildNumber, 
     totalCount as TotalTestCases, 
     (passCount*100)/(passCount+failCount) as PassPercent, 
     passCount, 
     failCount, 
     runOwner, 
     counts.runId, 
     (cast(counts.Count as decimal(10,4))/cast(failCount as decimal(10,4))) as PercentAnalysed 
FROM Runs,Product 
LEFT JOIN 
(SELECT COUNT(*) AS 'Count', 
    runId 
FROM Results WHERE Analysed = 'True' GROUP BY runId 
) counts on counts.runId = Runs.runId 
WHERE Runs.prodId=Product.prodId 

но он дает ошибку.

Индивидуально, оба запроса работают нормально. Кроме того, количество строк, возвращаемых обоими запросами, одинаковое, так что это не проблема.

Ошибка:

"Msg 4104, уровень 16, состояние 1, строка 13 из нескольких частей идентификатор "Runs.runId" не могли быть связаны."

ответ

1

Использование Inner Join чтобы присоединиться к таблице Runs and Products.

select Runs.runId, 
Runs.prodId, 
prodDate, 
prodName, 
buildNumber, 
totalCount as TotalTestCases, 
(passCount*100)/(passCount+failCount) as PassPercent, 
passCount, 
failCount, 
runOwner, 
counts.runId, 
(cast(counts.Count as decimal(10,4))/cast(failCount as decimal(10,4))) as PercentAnalysed 
from 
Runs AS Runs Inner Join Product AS Product On Runs.prodId=Product.prodId 
left join 
( 
    SELECT COUNT(*) AS 'Count', runId FROM Results WHERE Analysed = 'True' GROUP BY runId 
) counts on counts.runId = Runs.runId 
0

если две ваши первые запросы работают должным образом, то вы можете использовать их обоих в запросе, как показано ниже, и это должно слово правильно (вам просто нужно иметь условие соединения)

select * from --select columns you want 
-- Query i 
(
    select runId,Runs.prodId,prodDate,prodName,buildNumber,totalCount as 
    TotalTestCases,(passCount*100)/(passCount+failCount) as PassPercent, 
    passCount,failCount,runOwner from Runs,Product where 
    Runs.prodId=Product.prodId 
) qi --you need to have a join column inside it i.e runId 
join 
-- Query ii 
(
select runId , (cast(counts.Count as decimal(10,4))/cast(failCount as decimal(10,4))) as PercentAnalysed 
from Runs 
left join (SELECT COUNT(*) AS 'Count', runId FROM Results WHERE Analysed = 'True' GROUP BY runId) counts on counts.runId = Runs.runId 
) qii --you need to have a join column inside it. i.e runId 

on qi.runId=qii.runId 
0

Вы смешиваете где и участвуют заявления. Это не работает:

select Runs.runId,Runs.prodId,prodDate,prodName,buildNumber, 
    totalCount as TotalTestCases,(passCount*100)/(passCount+failCount) as PassPercent, passCount,failCount,runOwner, 
    counts.runId,(cast(counts.Count as decimal(10,4))/cast(failCount as decimal(10,4))) as PercentAnalysed 
from Runs join Product on Runs.runId= Product.prodId 
left join (SELECT COUNT(*) AS 'Count', runId FROM Results WHERE Analysed = 'True' GROUP BY runId) counts on counts.runId = Runs.runId 

Когда вы используете соединение из инструкции, вы должны использовать объединение для каждой таблицы.

+0

Ваш запрос дает коментарий. Идентификатор с несколькими частями "counts.runId" не может быть связан. Идентификатор с несколькими частями «counts.Count» не может быть связан. – bishnu

+0

Вы пропустили внутренний запрос: (SELECT COUNT (*) AS 'Count', RunID из результатов WHERE 'True' GROUP анализируемом = BY RunID ) считает – bishnu

+0

@bishnu Нет запроса не существует. – Jens

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