SQL-запрос поиска 2 значения из другой таблицы
У меня есть 3 таблицы:
1) JCTransactions
Job CostCode Date Amount
36801-001 01-150 1/8/2015 55.00
36801-001 02-240 2/6/2015 26.00
2) JCCostCode
Job CostCode Description
36801-001 01-000 Land
36801-001 01-150 Land Legal Fees
36801-001 02-000 Holding Costs
36801-001 02-240 Property Taxes
3) JCJob
Job Description
36801-001 BusinessCenter1
36901-001 BusinessCenter2(NotYetStarted)
Я хочу сделать запрос, который показывает все записи из таблицы JCTransactions, но с описанием задания, описанием кода затрат и описанием кода затрат верхнего уровня.
Например:
Job CostCode Date Amount JobDesc CostCodeDesc TopLevelCostCode TopLevelCodeDesc
36801-001 01-150 1/8/2015 55.00 BusinessCenter1 Land Legal Fees 01-000 Land
36801-001 02-240 2/6/2015 26.00 BusinessCenter1 Property Taxes 02-000 Holding Costs
У меня возникают проблемы при получении TopLevelCostCode и их описания в результатах.
Вот мой код, который работает хорошо, за исключением того, что у него нет последних 2 столбцов, которые я хочу:
SELECT JCTRANSACTIONS.Job,
JCTRANSACTIONS.CostCode,
JCTRANSACTIONS.Date,
JCTRANSACTIONS.Amount,
JCJOB.Description,
JCCOSTCODE.Description
FROM "\\Network\".JCCOSTCODE JCCOSTCODE,
"\\ Network \".JCJOB JCJOB,
"\\ Network \".JCTRANSACTIONS JCTRANSACTIONS
WHERE
JCJOB.Job = JCTRANSACTIONS.Job AND
JCCOSTCODE.Cost_Code = JCTRANSACTIONS.Cost_Code AND
JCCOSTCODE.Job = JCJOB.Job AND
JCCOSTCODE.Job = JCTRANSACTIONS.Job
1 ответ
select * from JCCOSTCODE
select * from JCJOB
select * from JCTRANSACTIONS
select Res1.job,Res1.costcode,res1.date,res1.amount,res1.jobdesc,res1.costdesc,res2.topLevelCode,res2.TopLevelCodeDesc from (
SELECT JCTRANSACTIONS.Job,
JCTRANSACTIONS.CostCode,
JCTRANSACTIONS.Date,
JCTRANSACTIONS.Amount,
JCJOB.Description jobdesc,
JCCOSTCODE.Description as costdesc ,
row_number() over(order by JCTRANSACTIONS.CostCode) rowid
FROM JCCOSTCODE JCCOSTCODE
inner join JCJOB JCJOB on JCCOSTCODE.Job = JCJOB.Job
inner join JCTRANSACTIONS JCTRANSACTIONS on JCJOB.Job = JCTRANSACTIONS.Job and JCCOSTCODE.CostCode = JCTRANSACTIONS.CostCode) Res1 inner join (
select costcode as topLevelCode, Description as TopLevelCodeDesc, ROW_NUMBER() over (order by costcode ) rowid from JCCOSTCODE where costcode not in (select costcode from JCTRANSACTIONS)) res2
on Res1.rowid = Res2.rowid