2013-11-21 25 views
1

У меня есть два различных запросов на выборку, которые возвращают данные, как показано ниже,регистрации в SQL Server 2008

Запрос 1

SELECT 
    COUNT(showtimeId) AS TotalShows, 
    SUM(sc.Capacity) AS ScreenCapacity, 
    ShowDate ------For all screens 
FROM Shows s 
JOIN Screens sc ON sc.ScreenID = s.ScreenID 
WHERE 
    s.ShowDate < @dateNew -- someDate 
    AND s.MovieID = 34 
    AND s.IsDeleted = 0 
GROUP BY 
    ShowDate 

Это выводит данные на картинке

enter image description here,

также другой select запрос как,

Запрос 2

SELECT 
    s.ShowDate, 
    COUNT(ut.UserTicketID) AS TotalTicketsSold, 
    SUM(ISNULL((Price+ConvinienceCharge-DiscountAmount)/(EntertainmentTax+BoxOfficeTax+1), 0)) AS Nett 
FROM Shows s 
LEFT OUTER JOIN UserTickets ut ON s.ShowID = ut.ShowID 
WHERE 
    ut.ShowID IN (SELECT ShowID 
       FROM Shows 
       WHERE ShowDate < @dateNew -- someDate 
        AND MovieID = 34 
        AND IsDeleted = 0 
       GROUP BY 
        ShowID) 
GROUP BY 
    s.ShowDate 

Это выходные данные, как в образе

enter image description here

Я не могу присоединиться к этим две таблицы таким образом, чтобы получить выход, как это,

enter image description here

Я попытался объявить ta и вставлять в таблицы, а затем выбирать, используя запрос соединения, но faii для вставки в таблицы. Моя вставка запроса, как,

DECLARE @tempTable TABLE (
    id INT identity(1, 1), 
    TotalShows INT, 
    ScreenCapacity INT, 
    ShowDate DATETIME 
    ) 

INSERT INTO @tempTable (
    TotalShows, 
    ScreenCapacity, 
    ShowDate 
    ) 
VALUES (
    (
     SELECT COUNT(showtimeId) AS TotalShows, 
      sum(sc.Capacity) AS ScreenCapacity, 
      ShowDate ------For all screens 
     FROM Shows s 
     JOIN Screens sc ON sc.ScreenID = s.ScreenID 
     WHERE s.ShowDate < @dateNew -- someDate 
      AND s.MovieID = 34 
      AND s.IsDeleted = 0 
     GROUP BY ShowDate 
     ) 
    ) 

И ошибка являются

только одно выражение может быть указан в списке выбора, когда подзапрос не вводится с EXISTS.
В инструкции INSERT больше столбцов, чем значений, указанных в предложении VALUES. Количество значений в предложении VALUES должно соответствовать количеству столбцов, указанных в инструкции INSERT.

+0

Ваш 'INSERT' - это все неправильно; вы можете ** либо ** иметь 'INSERT INTO dbo.Table (col1, .., colN) VALUES (val1, .., valN)' и вы предоставляете n определенных значений в виде литералов или переменных SQL Server - ** OR * * вы используете 'INSERT INTO dbo.Table (col1, ..., colN) SELECT val1, .., valN ....' - используйте 'SELECT', но тогда вы ** не должны ** иметь' VALUES' ключевое слово. [Подробнее см. В официальных документах «INSERT»] (http://technet.microsoft.com/en-us/library/ms174335.aspx) –

ответ

2

Вы можете использовать ваши запросы как производные таблицы и присоединиться к ShowDate.

SELECT T1.TotalShows, 
     T1.ScreenCapacity, 
     T1.ShowDate, 
     T2.TotalTicketsSold, 
     T2.Nett 
FROM (
    SELECT COUNT(showtimeId) AS TotalShows, 
     sum(sc.Capacity) AS ScreenCapacity, 
     ShowDate ------For all screens 
    FROM Shows s 
    JOIN Screens sc ON sc.ScreenID = s.ScreenID 
    WHERE s.ShowDate < @dateNew -- someDate 
     AND s.MovieID = 34 
     AND s.IsDeleted = 0 
    GROUP BY ShowDate 
    ) AS T1 
    INNER JOIN 
    (
    SELECT s.ShowDate, 
     COUNT(ut.UserTicketID) AS TotalTicketsSold, 
     SUM(ISNULL((Price+ConvinienceCharge-DiscountAmount)/(EntertainmentTax+BoxOfficeTax+1), 0)) AS Nett 
    FROM Shows s 
    LEFT OUTER JOIN UserTickets ut ON s.ShowID = ut.ShowID 
    WHERE ut.ShowID IN (
      SELECT ShowID 
      FROM Shows 
      WHERE ShowDate < @dateNew -- someDate 
       AND MovieID = 34 
       AND IsDeleted = 0 
      GROUP BY ShowID 
      ) 
    GROUP BY s.ShowDate 
    ) AS T2 
    ON T1.ShowDate = T2.ShowDate 
+0

Хорошая работа, Микаэль. Он работал хорошо, но для получения моего результата я использую LEFT OUTER JOIN. – Jeetendra

1

Mybe Это будет работать?

SELECT 
    COUNT(showtimeId) AS TotalShows, 
    SUM(sc.Capacity) AS ScreenCapacity, 
    ShowDate ------For all screens, 
    ,COUNT(ut.UserTicketID) AS TotalTicketsSold, 
    SUM(ISNULL((Price+ConvinienceCharge-DiscountAmount)/ 
     (EntertainmentTax+BoxOfficeTax+1), 0)) AS Nett 
FROM Shows s 
JOIN Screens sc ON sc.ScreenID = s.ScreenID 
LEFT OUTER JOIN UserTickets ut ON s.ShowID = ut.ShowID 
WHERE s.ShowDate < @dateNew -- someDate 
    AND s.MovieID = 34 
    AND s.IsDeleted = 0 
GROUP BY ShowDate