Вставить в запрос - PullRequest
       1

Вставить в запрос

1 голос
/ 26 марта 2012

У меня есть temptable, который временно хранит данные, в котором первое поле заполняется из запроса, а второе поле является статическим значением

TempTable:

  • roomid.
  • isavailable.

Теперь я заполняю первое поле следующим запросом, но как мне заполнить оба поля одновременно?

Ниже приведен запрос на заполнение только первого поля

insert into temptable (RoomID)
select t1.RoomId as RoomID 
from Room t1 
INNER JOIN 
(
      select RoomID, SUM(quantity) as QTY 
      from Room_Item 
      group by RoomID 
      having SUM(Quantity) > 0
 ) t2 on t1.RoomID = t2.RoomID 
 order by RoomID

Ответы [ 4 ]

3 голосов
/ 26 марта 2012

Просто передайте статическое значение непосредственно в оператор SELECT

INSERT INTO temptable (RoomID, isavailable)
SELECT t1.RoomId, 1 // static  value
FROM Room t1 
INNER JOIN 
(
    SELECT RoomID, SUM(quantity) AS QTY 
    FROM Room_Item 
    GROUP BY RoomID 
    HAVING SUM(Quantity) > 0
) t2 ON t1.RoomID = t2.RoomID 
ORDER BY RoomID
3 голосов
/ 26 марта 2012

INNER JOIN эффективно возвращает строки только при наличии комнаты.

Вы должны

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

Оператор SQL

insert into temptable (RoomID, IsAvailable) 
select  t1.RoomId as RoomID 
        , case when t2.qty IS NOT NULL then 1 ELSE 0 END
from    Room t1 
        LEFT OUTER JOIN (
          select  RoomID, SUM(quantity) as QTY 
          from    Room_Item 
          group   by
                  RoomID 
          having  SUM(Quantity) > 0
        ) t2 on t1.RoomID = t2.RoomID 
1 голос
/ 26 марта 2012

Может быть, что-то вроде этого:

;WITH CTE
AS
(
    select  
        RoomID, 
        SUM(quantity) OVER(PARTITION BY byRoomID) as QTY
    from    
        Room_Item 
)
insert into temptable 
(
    RoomID, 
    IsAvailable
) 
select  
    Room.RoomId, 
    (
        CASE 
            WHEN CTE.qty IS NOT NULL 
            THEN 1 
            ELSE 0 
        END
    ) AS IsAvailable
from    
    Room 
    LEFT JOIN CTE
        ON t1.RoomId=CTE.RoomID
        AND CTE.QTY>0
0 голосов
/ 26 марта 2012
insert into temptable (RoomID, IsAvailable) 
select  t1.RoomId as RoomID 
, case when t2.qty IS NOT NULL then 1 ELSE 0 END
from    Room t1 
LEFT OUTER JOIN (
  select  RoomID, SUM(quantity) as QTY 
  from    Room_Item 
  group   byRoomID 
  having  SUM(Quantity) > 0
) t2 on t1.RoomID = t2.RoomID 

Это может помочь вам получить результат ..

Ура ... !!!

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