kak соединить 2 таблицы

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
elvira
Сообщения: 60
Зарегистрирован: 28 авг 2006, 22:59

Помогите пожалуйста соединить правельно
2 таблицы

Tab1: (Sales)
Item_Code / код_предмета
Item / предмет
SALE_Date / дата продажи
Quantity / кол-во


Tab2: (Price_list)
Item_Code / код_предмета
Item / предмет
Price / цена
Start_Date / дата последнего изменения цены цены могут менятся и раз в мецяц и раз в пару лет
пример таблицы Price_list:
Item_Code … Item …. Price …. Start_date ….

340… .. BETA .. 3.72….. 01/01/1999
340… .. BETA .. 3.72….. 23/02/1999
340… .. BETA .. 4…….... 28/02/1999
340… .. BETA .. 4.2….… 20/02/2000
340… .. BETA .. 3.6….… 14/01/2001
340… .. BETA .. 3.25….. 06/01/2002
340… .. BETA .. 3.55….. 03/01/2005
340… .. BETA .. 3.8...…. 01/01/2006

Код: Выделить всё

SELECT DISTINCT 
                      TOP 100 PERCENT dbo.SALES.ITEM_CODE, dbo.SALES.ITEM, dbo.SALES.SALE_DATE, Quantity
                      dbo.Price_LIST.PRICE, dbo.Price_LIST.START_DATE
FROM         dbo.SALES INNER JOIN
                      dbo.Price_LIST ON dbo.SALES.ITEM_CODE = dbo.Price_LIST.ITEM_CODE AND 
                      dbo.SALES.SALE_DATE >= dbo.Price_LIST.START_DATE
WHERE     (dbo.SALES.SALE_DATE BETWEEN dbo.SALES.SALE_DATE AND dbo.Price_LIST.START_DATE)
в резултате чего получается:
item_code .............Quantity........date_sales...............Price.........Start_Date
340.......... BETA........ 180.......... 01/01/2003............... 3.72......... 01/01/1999
340.......... BETA........ 180.......... 01/01/2003............... 3.72......... 2/23/1999
340.......... BETA........ 180.......... 01/01/2003............... 4.............. 2/28/1999
340.......... BETA........ 180.......... 01/01/2003............... 4.2........... 2/20/2000
340.......... BETA........ 180.......... 01/01/2003............... 3.6........... 1/14/2001
340.......... BETA........ 180.......... 01/01/2003............... 3.25......... 01/06/2002

а должна получить всего одну строчку, где price(цена) будет соответствовать date_sales(дате продажи)
item_code .............Quantity........date_sales...............Price.........Start_Date
340.......... BETA........ 180.......... 01/01/2003............... 3.25......... 01/06/2002
НЕПОЛУЧАЕТСЯ :(
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

elvira, на будущее: пиши плиз create table и insert into values c тестовыми значениями, чтобы желающие тебе помочь не мучались с этим.
А решение может быть например таким:

Код: Выделить всё

select
    *
from
    sales s,
    pricelist p
where
    s.item_code = p.item_code
and p.start_date  = (select 
                        max(p1.start_date) 
                     from
                        pricelist p1 
                     where 
                        p1.item_code =p.item_code 
                    and p1.start_date <= s.sale_date
                    )
Даже самый дурацкий замысел можно воплотить мастерски
elvira
Сообщения: 60
Зарегистрирован: 28 авг 2006, 22:59

большое, большое чел спасибо
Ответить