2015-02-10 49 views
-1

我想重複計數1,但它與每個記錄重複1。你能建議做什麼?想要一個計數,但它與每一個記錄

SELECT Count(*), 
     innerTable.* 
FROM (SELECT (SELECT NAME 
       FROM tours 
       WHERE tours.id = tourbooking.tourid)   AS NAME, 
       (SELECT url 
       FROM tours 
       WHERE tours.id = tourbooking.tourid)   AS Url, 
       (SELECT TOP 1 NAME 
       FROM tourimages 
       WHERE tourimages.tourid = tourbooking.tourid 
       ORDER BY id ASC)        AS ImageName, 
       (SELECT duration + ' ' + CASE WHEN durationtype = 'd' THEN 
         'Day(s)' WHEN 
         durationtype = 
         'h' THEN 'Hour(s)' END 
       FROM tours 
       WHERE tours.id = tourbooking.tourid)   AS Duration, 
       (SELECT Replace(Replace('<a> Adult(s) - <c> Children', '<a>', Sum 
           (CASE 
             WHEN [type] = 1 THEN 1 
             ELSE 0 
           END)), 
         '<c>', 
         Sum(CASE 
         WHEN [type] = 2 THEN 1 
         ELSE 0 
         END)) 
       FROM tourperson 
       WHERE tourperson.bookingid = tourbooking.id) AS TotalPassengers 
       , 
       startdate, 
       createddate         AS BookingDate, 
       id            AS BookingID, 
       [status], 
       serviceprice 
     FROM tourbooking 
     WHERE memberid = 6)AS innerTable 
GROUP BY innerTable.NAME, 
      innerTable.bookingdate, 
      innerTable.bookingid, 
      innerTable.duration, 
      innerTable.imagename, 
      innerTable.serviceprice, 
      innerTable.startdate, 
      innerTable.status, 
      innerTable.totalpassengers, 
      innerTable.url 
+0

這聽起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。請給我們你的表與數據和你期望什麼,而不是你的方法來實現它。 – 2015-02-10 07:17:12

+0

因爲所有內部查詢都可以使用連接進行組合。 – 2015-02-10 07:25:06

+0

SELECT COUNT(*),T *從(SELECT Tours.Name,Tours.Duration,Tours.DurationType,Tours.Url,TourImages.Name作爲ImageName,TourBooking.CreatedDate爲BookingDate, TourBooking.ID爲BookingID,TourBooking。起始日期作爲開始日期,作爲TourBooking.ServicePrice ServicePrice 從TourBooking加入圖爾上TourBooking.TourID = Tours.ID 加入TourImages上TourImages.TourID = TourBooking.TourID 其中TourBooking.MemberID = 6)爲T 組由 T.BookingDate , t.BookingID, t.Duration, t.DurationType, t.ImageName, t.Name, t.ServicePrice, t.StartDate, t.Url – Mike 2015-02-10 07:45:40

回答

0

您從tourbooking中選擇記錄。您選擇的其中一列是id。這可能是表的主鍵,因此是唯一的。 (如果沒有,你應該趕快更改名稱。)

你把這個ID BookingID,這是你組由一列。因此,您在tourbooking中獲得每個記錄的一個結果記錄。這樣的「組」中的記錄數量當然是1;這是您選擇並顯示的一條記錄。

如果內置真正羣體,就是每天結果記錄,那麼你會得到一個真正的計數,例如每天的預訂數量。

+0

是的,你是正確的你有點..你可以發佈如何可能... BookingID是主鍵 – Mike 2015-02-10 07:56:23

+0

在你的GROUP BY子句中,你可以指定你想在結果中看到什麼記錄。一個例子:'GROUP BY innerTable.bookingdate,innerTable.status'會給你*一個*結果記錄*每個* bookingdate和狀態。在你的SELECT子句中,你不會選擇'innerTable。*',而是爲一個組合計,例如:innerTable.bookingdate,innerTable.status,MIN(innerTable.duration)AS min_duration,MAX(innerTable.duration)AS max_duration, SUM(innerTable.totalpassengers)AS乘客,COUNT(*)AS預訂。所以:想想你想要分組的內容,並考慮每個組要顯示的數據。 – 2015-02-10 08:12:37

+0

請訪問此..... https://stackoverflow.com/questions/28428157/how-to-get-count-with – Mike 2015-02-10 09:29:58

相關問題