Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Sql中组合两行数据_Sql_Sql Server_Datestamp - Fatal编程技术网

在Sql中组合两行数据

在Sql中组合两行数据,sql,sql-server,datestamp,Sql,Sql Server,Datestamp,因此,我的数据如下所示: +-----------+---------+-------------+-------+-------------+--+ | time | Outlets | Meal_Period | cover | day_of_week | | +-----------+---------+-------------+-------+-------------+--+ | 10/1/2013 | 72 | 1 | 0 | Tu

因此,我的数据如下所示:

+-----------+---------+-------------+-------+-------------+--+
|   time    | Outlets | Meal_Period | cover | day_of_week |  |
+-----------+---------+-------------+-------+-------------+--+
| 10/1/2013 |      72 |           1 |     0 | Tuesday     |  |
| 10/1/2013 |      72 |           2 |    31 | Tuesday     |  |
| 10/1/2013 |      72 |           3 |   116 | Tuesday     |  |
| 10/1/2013 |      72 |           6 |    32 | Tuesday     |  |
| 10/1/2013 |     187 |          17 |   121 | Tuesday     |  |
| 10/1/2013 |     187 |          18 |   214 | Tuesday     |  |
| 10/1/2013 |     187 |          19 |   204 | Tuesday     |  |
| 10/1/2013 |     101 |           2 |     0 | Tuesday     |  |
| 10/1/2013 |     101 |           3 |     0 | Tuesday     |  |
| 10/1/2013 |     101 |           4 |     0 | Tuesday     |  |
| 10/1/2013 |     101 |           6 |     0 | Tuesday     |  |
| 10/1/2013 |     282 |           1 |    17 | Tuesday     |  |
| 10/1/2013 |     282 |           2 |   207 | Tuesday     |  |
| 10/1/2013 |     282 |           3 |   340 | Tuesday     |  |
| 10/1/2013 |     282 |           6 |     4 | Tuesday     |  |
| 10/1/2013 |     103 |           1 |     0 | Tuesday     |  |
+-----------+---------+-------------+-------+-------------+--+
代码是:

IF OBJECT_ID('tempdb.dbo.#time') IS NOT NULL
    DROP TABLE #time

SELECT DATEADD(dd, 0, DATEDIFF(DD, 0, open_dttime)) AS 'time'
    ,profit_center_id AS 'Outlets'
    ,meal_period_id AS 'Meal_Period'
    ,sum(num_covers) AS 'Number_Covers'
INTO #time
FROM [STOF_Infogen].[dbo].[Order_Header]
WHERE CasinoID = 'csg'
    AND profit_center_id IN (
        '102'
        ,'100'
        ,'283'
        ,'101'
        ,'282'
        ,'187'
        ,'280'
        ,'103'
        ,'281'
        ,'72'
        ,'183'
        )
    AND (
        open_dttime BETWEEN '2014-02-01 06:30'
            AND '2014-03-01 06:30'
        )
GROUP BY profit_center_id
    ,open_dttime
    ,meal_period_id
ORDER BY profit_center_id
    ,meal_period_id

IF OBJECT_ID('tempdb.dbo.#time2') IS NOT NULL
    DROP TABLE #time2

SELECT [TIME]
    ,Outlets AS 'Outlets'
    ,meal_period AS 'Meal_Period'
    ,SUM(number_covers) AS 'cover'
    ,DATENAME(DW, [time]) AS 'day_of_week'
INTO #time2
FROM #time
GROUP BY [TIME]
    ,Outlets
    ,Meal_Period
ORDER BY [TIME] ASC
    ,Outlets
    ,Meal_Period

SELECT *
FROM #time2
我为我的约会对象创建了临时放置表,但我有两个问题

  • 我想分组利润中心是187和282,同时保留其他行
  • 由于某种原因,我无法查看日期戳,因为它不包括一个月的最后一天 一如既往,非常感谢您的帮助。

    制作一些测试数据:

    DECLARE @MealInfo TABLE
    (
        MealTime DATETIME,
        Outlets VARCHAR(10),
        Meal_Period int,
        Cover INT
    )
    
    INSERT INTO @MealInfo
    VALUES
    ('10/1/2013', '72', 1, 0),
    ('10/1/2013', '72', 2, 31),
    ('10/1/2013', '72', 3, 116),
    ('10/1/2013', '72', 6, 32),
    ('10/1/2013', '187', 17, 121),
    ('10/1/2013', '187', 18, 214),
    ('10/1/2013', '187', 19, 204),
    ('10/1/2013', '101', 2, 0),
    ('10/1/2013', '101', 3, 0),
    ('10/1/2013', '101', 4, 0),
    ('10/1/2013', '101', 6, 0),
    ('10/1/2013', '282', 1, 17),
    ('10/1/2013', '282', 2, 207),
    ('10/1/2013', '282', 3, 340),
    ('10/1/2013', '282', 6, 4),
    ('10/1/2013', '103', 1, 0);
    
    因为您想将187和282分为一组,所以我使用案例说明将它们分为一个门店,然后我们可以对门店进行分组,以划分金额:

    SELECT 
        m.MealTime, 
        m.Outlets, 
        m.Meal_Period, 
        SUM(m.Cover) AS Number_Covers
    FROM
    (
        SELECT mi.MealTime,
            (CASE WHEN mi.Outlets IN ('187', '282') THEN '187+282' ELSE mi.Outlets END) Outlets,
            mi.Meal_Period,
            mi.Cover
        FROM @MealInfo mi
    ) m
    GROUP BY m.MealTime, m.Outlets, m.Meal_Period
    
    以下是输出:

    MealTime    Outlets Meal_Period Number_Covers
    2013-10-01 00:00:00.000 101 2   0
    2013-10-01 00:00:00.000 101 3   0
    2013-10-01 00:00:00.000 101 4   0
    2013-10-01 00:00:00.000 101 6   0
    2013-10-01 00:00:00.000 103 1   0
    2013-10-01 00:00:00.000 187+282 1   17
    2013-10-01 00:00:00.000 187+282 2   207
    2013-10-01 00:00:00.000 187+282 3   340
    2013-10-01 00:00:00.000 187+282 6   4
    2013-10-01 00:00:00.000 187+282 17  121
    2013-10-01 00:00:00.000 187+282 18  214
    2013-10-01 00:00:00.000 187+282 19  204
    2013-10-01 00:00:00.000 72  1   0
    2013-10-01 00:00:00.000 72  2   31
    2013-10-01 00:00:00.000 72  3   116
    2013-10-01 00:00:00.000 72  6   32
    

    如果您的数据有187和282的重叠周期,那么总和将包含这两个部分,并将其分为一列。

    您的问题非常不清楚。你能用实际的数据和表创建一个sql数据库吗?您可以在sqlfiddle.com上进行此操作。然后清楚地解释你想要什么,我们可以帮助你。请改进你的问题——当你说“仍然保留其他行”时,你是什么意思?您能给出一些示例输出吗?SQL Server和MySQL是不同的数据库,但您已经用这两个数据库对其进行了标记-您使用的是什么数据库?我猜是SQL Server,但请澄清。我想按日期和用餐时间合并,其中利润中心id等于“282”和“187”,同时仍输出所有其他利润中心id的数据。