2016-07-22 115 views
0

,我有以下表格的信息挑整行的具體信息:sql中根據另一列

Location_id | Date_1 | Ex_Start | EX_End | Condition | Price 
------------+------------+-------------+-----------------------+------- 
    L_1  | 23-JUL-16 | 08-JUN-16 | 25-JUL-16 | EX  | 109 
    L_1  | 23-JUL-16 | 28-JUL-16 | 31-JUL-16 | Non_EX | 109 
    L_1  | 24-JUL-16 | 08-JUN-16 | 25-JUL-16 | EX  | 89 
    L_1  | 24-JUL-16 | 28-JUL-16 | 31-JUL-16 | Non_EX | 89 
    ...   ...   ...   ...  ...  
    L_2  | 23-JUL-16 | 24-JUL-16 | 15-AUG-16 | Non_EX | 99 
    L_2  | 23-JUL-16 | 26-OCT-16 | 29-JAN-17 | Non_EX | 99 
    L_2  | 24-JUL-16 | 24-JUL-16 | 15-AUG-16 | EX  | 79 
    L_2  | 24-JUL-16 | 26-OCT-16 | 29-JAN-17 | Non_EX | 79 
    ...   ...   ...   ...  ... 

「DATE_1」是從當前日期到明年的同一天。 對於「條件」欄,「EX」表示「Date_1」落入EX期間(在「EX_Start」和「Ex_End」之間) 對於「條件」列,「Non_EX」表示它不落入EX期間,和「EX」意味着它落入 我想要在所有Location_id中選擇特定的Date_1信息,並且如果在同一日期下每個位置有一個「Ex」,條件將返回「EX」,否則它將返回「Non_EX 。」

例如該表將返回:

Location_id | Date_1 | Condition | Price 
------------+------------+-------------+----------------------- 
    L_1  | 23-JUL-16 | EX   | 109 
    L_1  | 24-JUL-16 | EX   | 89 
    ...   ...   ...   ... 
    L_2  | 23-JUL-16 | Non_EX  | 99 
    L_2  | 24-JUL-16 | EX   | 79 
    ...   ...   ...   ... 

感謝

+0

這是哪個數據庫(版本)?你到目前爲止嘗試了什麼? – Abecee

+0

它在Oracle SQL Developer 4.1.3上,並且還沒有嘗試過,因爲我不知道如何把價格放到表中。 –

回答

0

THI! s會爲你的情況工作,請嘗試。

SELECT location,date1, min(condition),Price 
from location group by location, date1,Price 

更新以包括價格也。

+0

謝謝,這工作!但是我怎樣才能把「價格」信息放入表格中? –

0

如果位置DATE_1的每個組合的價格是相同的,遵循@Prashant Majhwar。但是,如果在價格可能各自EX之間不同Non_EX,你可能要沿着

WITH 
Data_Raw (location_ID, date_1, ex_Start, ex_End, condition, price) AS (
    SELECT 'L_1', '23-JUL-16', '08-JUN-16', '25-JUL-16', 'EX', 109 FROM DUAL UNION ALL 
    SELECT 'L_1', '23-JUL-16', '28-JUL-16', '31-JUL-16', 'Non_EX', 110 FROM DUAL UNION ALL 
    SELECT 'L_1', '24-JUL-16', '08-JUN-16', '25-JUL-16', 'EX', 89 FROM DUAL UNION ALL 
    SELECT 'L_1', '24-JUL-16', '28-JUL-16', '31-JUL-16', 'Non_EX', 90 FROM DUAL UNION ALL 
    SELECT 'L_2', '23-JUL-16', '24-JUL-16', '15-AUG-16', 'Non_EX', 99 FROM DUAL UNION ALL 
    SELECT 'L_2', '23-JUL-16', '26-OCT-16', '29-JAN-17', 'Non_EX', 99 FROM DUAL UNION ALL 
    SELECT 'L_2', '24-JUL-16', '24-JUL-16', '15-AUG-16', 'EX', 79 FROM DUAL UNION ALL 
    SELECT 'L_2', '24-JUL-16', '26-OCT-16', '29-JAN-17', 'Non_EX', 80 FROM DUAL 
), 
Data (location_ID, date_1, ex_Start, ex_End, condition, price) AS (
SELECT 
    location_Id, TO_DATE(date_1, 'DD-MON-RR'), TO_DATE(ex_Start, 'DD-MON-RR') 
    , TO_DATE(ex_End, 'DD-MON-RR'), condition, price 
FROM Data_Raw 
) 
SELECT DISTINCT 
    M.location_ID 
    , TO_CHAR (M.date_1, 'DD-MON-RR') date_1 
    , M.condition 
    , D.price 
FROM 
    (SELECT 
    location_ID 
    , date_1 
    , MIN(condition) condition 
    FROM Data 
    GROUP BY location_ID, date_1 
) M 
JOIN Data D 
    ON M.location_ID = D.location_ID 
    AND M.date_1 = D.date_1 
    AND M.condition = D.condition 
ORDER BY location_id, date_1 
; 

嘗試:

  • 使用子查詢來放大通緝條件,
  • JOIN回到您的數據拉價格(並允許這樣做與其他列UMNS以及 - 通過你的問題的標題的建議),並
  • DISTINCT s到避免重複行的Non_EX

如有意見,並因爲這需要調整/進一步的細節。

+0

是的,這工作! –