SQL-запрос для объединения 3 таблиц с помощью объединений - PullRequest
2 голосов
/ 10 июня 2011

Я хотел бы отобразить значения столбцов 3 таблиц (регистрация данных, температура, давление), как показано ниже, и мой запрос также показан ниже, но здесь значения температуры повторяются, я хочу, чтобы все соответствующие значения для конкретной даты как я могу это сделать?Кто-нибудь может мне помочь, пожалуйста?

Таблицы

  1. регистрация данных5

    name     shift name   operator   id   date                     plant   line   machi
    -------  -----------  ---------  ---  -----------------------  ------  -----  -----
    ashwini  shift1(7-3)  Operator1  102  2011-06-07 00:00:00.000  Plant1  Line1  mc1
    pradeep  shift1(7-3)  Operator1  101  2011-06-06 00:00:00.000  Plant1  Line1  mc1
    ...
    
  2. температура

    temprature  time                     date
    ----------  -----------------------  -------------------
    27          1900-01-01 15:45:41.000  2011-06-06 00:00:00
    27.3        1900-01-01 15:50:41.000  2011-06-06 00:00:00
    ...
    
  3. давление

    temprature  time                     date
    ----------  -----------------------  -------------------
    0.5         1900-01-01 15:45:41.000  2011-06-06 00:00:00
    0.7         1900-01-01 15:50:41.000  2011-06-06 00:00:00
    ...
    

Мой SQL-запрос

select Date=convert(varchar(12),(t1.date),101), t1.time, operatorname, 
    machine, line, t2.time, Temprature, Pressure
from datalogging5 t 
inner join temprature t1 on t1.date=t.date 
inner join pressure t2 on t.date=t2.date  order by t.date

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Вам необходимо объединить таблицы температуры и давления как по дате, так и по времени (поскольку они, очевидно, хранятся в отдельных столбцах)

Select D.Date, T.Time...
From DataLoggings As D
    Join Temperature As T
        On T.Date = D.Date
    Join Pressure As P
        On P.Date = T.Date
            And P.Time = T.Time

В вашей схеме есть несколько ловушек, и этот запрос:

  1. Время в таблице «Температура» должно точно совпадать с точностью до миллисекунды с временем в таблице «Давление».
  2. У вас должны быть и показания температуры, и показания давления в течение заданного времени, чтобы любой из них мог вернуться в список. Одним из способов решения этой проблемы является построение расписания секунд в день из таблицы Numbers или Tally, которая является уродливым решением.

Вы можете рассмотреть таблицу измерений вместо отдельной таблицы для температуры и давления. Так что-то вроде:

Create Table Measurements
    (
    ReadingType varchar(15) not null
    , Reading float not null
    , Date date not null
    , Time time not null
    , Check( ReadingType In('Temperature','Pressure') )
    )
1 голос
/ 10 июня 2011

Я не очень хорошо владею SQL, поэтому, если я делаю что-то не так, дайте мне знать, но вы не можете просто сделать что-то вроде:


SELECT CONVERT(varchar(12),(t1.date),101) AS Date, t1.time, t.operatorname, 
    t.machine, t.line, t2.time, t1.temprature, t2.pressure
FROM datalogging5 t 
INNER JOIN temprature t1 ON t1.date=t.date 
INNER JOIN pressure t2 ON t.date=t2.date
WHERE t.date = '2011-6-10'
ORDER BY t.date;

Вы можете заменить 2011-6-10с тем, что ваш поисковый запрос.Что касается вашей проблемы повторения температуры, я думаю, что проблема заключается в том, что вы пытаетесь соединить таблицы через столбцы даты.Существует вероятность того, что несколько записей данных или температур имеют одну и ту же дату, поэтому при выполнении запроса он будет отображаться один раз для каждой соответствующей записи, что делает его дубликатом.

В любом случае,дайте мне знать, если этот код - то, что вы искали или нет.

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