Как объединить SQL-запрос (требуется помощь) - PullRequest
0 голосов
/ 08 августа 2009

Дорогие друзья, ниже приведены два моих SQL-запроса:

select distinct  
    a_bm.DestProvider_ID,
    a_bm.DestCircel_ID,
    convert(datetime,dbo.fnToDate(a_bm.BM_BillFrom),103) as fromdate,
    convert(datetime,dbo.fnToDate(a_bm.BM_BillTo),103) as todate,
    t_rec.TapInRec as BillRecevable,
    t_rec.TapInRec as Billreceied
from Auditdata_BillingMaster a_bm 
inner join TapInRecordMaster t_rec
    on a_bm.DestProvider_ID = t_rec.DestProviderMaster_ID
    and a_bm.DestCircel_ID = t_rec.DestCircelMaster_ID
    and convert(datetime,dbo.fnToDate(a_bm.BM_BillFrom),103)> =  
        convert(datetime,t_rec.Months) 
    and convert(datetime,dbo.fnToDate(a_bm.BM_BillTo),103)<= 
        convert(datetime,t_rec.BillTo)
where a_bm.DestProvider_ID=4
and a_bm.DestCircel_ID=22
and a_bm.typeoffile=1
and convert(datetime,dbo.fnToDate(a_bm.BM_BillFrom),103)>=
    convert(datetime,'6/1/2009') 
and convert(datetime,dbo.fnToDate(a_bm.BM_BillFrom),103)<=
    convert(datetime,'7/30/2009')

select Temp_tbl.fromdate from Temp_tbl Temp_tbl
inner join (
    select
        convert(datetime,dbo.fnToDate(BM_BillFrom),103) as a1,
        convert(datetime,dbo.fnToDate(BM_BillTo),103) as b1,
        count(*) as c1,
        am_bm.DestProvider_ID,
        am_bm.DestCircel_ID
    from Auditdata_BillingMaster am_bm
    inner join Temp_tbl tmp
        on tmp.Provider_ID=am_bm.DestProvider_ID
        and tmp.Circel_ID=am_bm.DestCircel_ID
    where  convert(datetime,tmp.fromdate)>=
        convert(datetime,dbo.fnToDate(am_bm.BM_BillFrom),103)
    and convert(datetime,tmp.todate) <= 
        convert(datetime,dbo.fnToDate(am_bm.BM_BillTo),103)
    group by
        convert(datetime,dbo.fnToDate(BM_BillFrom),103),
        convert(datetime,dbo.fnToDate(BM_BillTo),103),
        am_bm.DestProvider_ID,
        am_bm.DestCircel_ID
    ) b
    on Temp_tbl.Provider_ID = b.DestProvider_ID
    and Temp_tbl.Circel_ID = b.DestCircel_ID
    and convert(datetime,Temp_tbl.fromdate,101)>= convert(datetime,(b.a1),101)
    and convert(datetime,Temp_tbl.todate) <= convert(datetime,(b.b1),101)

Я хочу объединить более 2 запросов SQL в SQL Server 2000.

Пожалуйста, помогите мне.

Заранее спасибо.

1 Ответ

1 голос
/ 08 августа 2009

Вы хотите объединить или объединить обе таблицы?

Если вы хотите объединить оба результата запроса, просто примите оба результата в качестве входных данных для оператора JOIN.

То, как вы объедините оба результата, действительно зависит от вашей базы данных. Предпочтительно объединение основано на ссылочной целостности, обеспечивающей взаимосвязь между результатами для обеспечения целостности данных. Но поскольку вы не упомянули условие присоединения, позвольте мне предположить, что вы присоединитесь на основе DestProvider_ID & DestCircel_ID.

select 
    result1.DestProvider_ID,
    result1.DestCircel_ID,
    result1.fromdate,
    result1.todate,
    result1.BillRecevable,
    result1.Billreceied,
    result2.fromdate
from 
    ( *your first query* ) as result1
inner join
    (select
        Temp_tbl.fromdate, 
        am_bm.DestProvider_ID, 
        am_bm.DestCircel_ID
    from Temp_tbl Temp_tbl

        *the rest of your second query*

    ) as result2 on result1.DestProvider_ID = result2.DestProvider_ID 
                 and result1.DestCircel_ID = result2.DestCircel_ID

UNION:

Если вы хотите взять несколько операторов выбора и объединить их в один набор результатов, оператор UNION - это самый простой способ:

SELECT column1a, column2a, column3a FROM tableA
UNION
SELECT column1b, column2b, column3b FROM tableB

Это возможно только в том случае, если:

  • оба запроса имеют одинаковое количество столбцов
  • Соответствующие столбцы в каждом выражении запроса должны быть одного типа данных
  • тип данных column1a == column1b
  • тип данных column2a == column2b
  • тип данных column3a == column3b

Поскольку оба ваших запроса не имеют одинакового количества столбцов, вы не можете объединить их, по крайней мере, с помощью UNION select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...