2015-02-10 48 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

相关问题