2015-10-30 3 views
1

Я пытаюсь показать rowa и rowb (прямо под ним), если rowa истинно в инструкции WHERE. У меня есть ORDER BY Date, но это ничего не повлияет. Есть ли какие-либо быстрые способы отображения rowb, если строка rowa показана?SQL Microsoft Access Показать следующую следующую строку

Мой код ...

SELECT Roster.`Complete Name`, RS1018to1024.`Day of Week`, RS1018to1024.`Date`, RS1018to1024.`Time Type`, RS1018to1024.`Attribute`, RS1018to1024.`Value`, RS1018to1024.`Hourly value (in decimals)` 

FROM Roster 

INNER JOIN RS1018to1024 ON Roster.GIN = RS1018to1024.GIN 
WHERE (RS1018to1024.`Hourly value (in decimals)` >15 AND RS1018to1024.`Time Type`='Wellsite/Job/Vessel' OR RS1018to1024.Attribute='Job ID' ) 
OR (RS1018to1024.`Time Type`='On Office-Base-Lab' AND RS1018to1024.Attribute='Regular Work Day' AND RS1018to1024.`Hourly value (in decimals)`>8) 

ORDER BY RS1018to1024.`Complete Name`, RS1018to1024.`Date`, RS1018to1024.`Attribute` DESC; 

Day of Week| Date | Time Type | Attribute | Value  | Hourly value 

Tues  |20-Oct-2015| Wellsite | Reg Work Day | RGWD  | 16.8 

Tues  |20-Oct-2015| Wellsite | Job ID  | 2213  | 

Friday  |23-Oct-2015| Wellsite | Job ID  | 2251  | 

Wed  |21-Oct-2015| Wellsite | Reg Work Day | RGWD  | 24 

Tues  |21-Oct-2015| Wellsite | Job ID  | 2317  | 

Sunday  |18-Oct-2015| On Office | Reg Work Day | RGWD  | 12.2 

CREATE TABLE mytable(
    Day_of_Week    VARCHAR(8) NOT NULL PRIMARY KEY 
    ,Date      VARCHAR(9) NOT NULL 
    ,Time_Type     VARCHAR(19) NOT NULL 
    ,Attribute     VARCHAR(16) NOT NULL 
    ,Value      VARCHAR(28) NOT NULL 
    ,Hourly_value_in_decimals NUMERIC(5,2) 
); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Tuesday','20-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Tuesday','20-Oct-15','Wellsite/Job/Vessel','Job ID','2213840',NULL); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Friday','23-Oct-15','Wellsite/Job/Vessel','Job ID','2212599',NULL); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Friday','23-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',23.87); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Saturday','24-Oct-15','Wellsite/Job/Vessel','Job ID','2212599',NULL); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Sunday','18-Oct-15','On Office-Base-Lab','Regular Work Day','RGWD - Regular Work Day (BR)',19.87); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Monday','19-Oct-15','On Office-Base-Lab','Regular Work Day','RGWD - Regular Work Day (BR)',11.17); 

То, что я хотел бы видеть это ...

Day of Week| Date | Time Type | Attribute | Value  | Hourly value 

Tues  |20-Oct-2015| Wellsite | Reg Work Day | RGWD  | 16.8 

Tues  |20-Oct-2015| Wellsite | Job ID  | 2213  | 

Wed  |21-Oct-2015| Wellsite | Reg Work Day | RGWD  | 24 

Tues  |21-Oct-2015| Wellsite | Job ID  | 2317  | 

Sunday  |18-Oct-2015| On Office | Reg Work Day | RGWD  | 12.2 

CREATE TABLE mytable(
    Day_of_Week    VARCHAR(8) NOT NULL PRIMARY KEY 
    ,Date      VARCHAR(9) NOT NULL 
    ,Time_Type     VARCHAR(19) NOT NULL 
    ,Attribute     VARCHAR(16) NOT NULL 
    ,Value      VARCHAR(28) NOT NULL 
    ,Hourly_value_in_decimals NUMERIC(5,2) 
); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Tuesday','20-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Tuesday','20-Oct-15','Wellsite/Job/Vessel','Job ID','2213840',NULL); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Friday','23-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',23.87); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Saturday','24-Oct-15','Wellsite/Job/Vessel','Job ID','2212599',NULL); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Sunday','18-Oct-15','On Office-Base-Lab','Regular Work Day','RGWD - Regular Work Day (BR)',19.87); 
INSERT INTO mytable(Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('Monday','19-Oct-15','On Office-Base-Lab','Regular Work Day','RGWD - Regular Work Day (BR)',11.17); 

Таким образом, каждый тип времени, что говорит буровую площадку нужно две строки. Один для рабочего дня Reg и следующей строки, показывающей идентификатор задания. Мой код показывает все строки, у которых есть Идентификатор задания, из которого мне нужно избавиться, если у них нет рабочего дня Reg над ним. Кроме того, у меня есть строка типа On Office Time, которая прекрасна, и у меня нет никаких проблем.

+1

'select row, row, row from boat' http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – JamieD77

+1

Можете ли вы пожалуйста, поделитесь структурой своей таблицы, некоторыми примерами данных и результатом, который вы пытаетесь получить? Благодаря! – Mureinik

ответ

1

Проблема с вашими требованиями заключается в том, что вы предполагаете, что данные упорядочены, и вы эту строку и следующую строку. Однако в SQL-данных не упорядочен, вам нужен столбец для использования в предложении ORDER BY, чтобы получить заказ.

Рассматривая данные примера, кажется, что две строки, которые вы хотите, имеют одну и ту же дату. ЕСЛИ ЭТО ДЕЛО, тогда решение не сложно. Вы делаете это так:

Сначала вы получите список дат, соответствующих критериям.

SELECT `Date` 
FROM ROSTER 
WHERE `Hourly Value` > 15 AND Attribute = 'Reg Work Day' 

Тогда вы берете этот список в качестве критериев для выбора остальных таблицы

SELECT * 
FROM ROSTER 
WHERE `Date` IN (
    SELECT `Date` 
    FROM ROSTER 
    WHERE `Hourly Value` > 15 AND Attribute = 'Reg Work Day' 
) sub 

вынос здесь является то, что вы не можете думать упорядоченный и последовательный в SQL - вы должны думать в наборах - SQL сделок в наборах.

+0

Мне нужно что-то более сложное, чем это. Я больше пытаюсь собрать пару строк подряд. Например, если строка (m) равна> 15, чем строка show (m) и строка (n). Если строка (m) не> 15, то не показывать строку (m) или строку (n). – PVic

+0

Проблема с вашим вопросом заключается в том, что вы предполагаете, что таблицы упорядочены. В SQL-таблицах не упорядочены - вы добавляете заказ в инструкцию ORDER BY, так как я знаю, что такое «следующая» строка? – Hogan

+0

@ user3827129 - см. Править – Hogan

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