SQL Server:将所有数据分组到一列

时间:2016-07-05 03:01:44

标签: sql-server stored-procedures

我在编写SQL Server存储过程时需要一些帮助。所有数据分组均由 Train_B_N

组成

my table data

预期结果:

expecting output

        with CTE as
        (
            select Train_B_N, Duration,Date,Trainer,Train_code,Training_Program
            from Train_M
            group by Train_B_N
        )

        select
            *
        from Train_M as m
        join CTE as c on c.Train_B_N = m.Train_B_N

我的查询有什么问题?

1 个答案:

答案 0 :(得分:0)

GROUP BY将表格混合在一起,因此,如果没有GROUPED的列合并会导致数据出现问题。

select Train_B_N, Duration,Date,Trainer,Train_code,Training_Program
            from Train_M
            group by Train_B_N

ANSI标准,GROUP BY必须包含SELECT语句中不在聚合函数中的所有列。没有例外。

WITH CTE AS (SELECT TRAIN_B_N, MAX(DATE) AS Last_Date
FROM TRAIN_M
GROUP BY TRAIN_B_N)

SELECT A.Train_B_N, Duration, Date,Trainer,Train_code,Training_Program
FROM TRAIN_M AS A
INNER JOIN CTE ON CTE.Train_B_N = A.Train_B_N
              AND CTE.Last_Date = A.Date

此示例将返回该ID使用的最后一个培训计划,培训师,train_code。 这是通过MAX(DATE)聚合函数实现的,该函数在表中保留了最大(最新)的DATE。由于GROUP BY将行打破为不同的分组,因此JOIN仅返回表格结果的一部分。

请注意,SQL将返回#table_rows X #Matching_rows,如果#Matching_rows cardinality大于1,您将获得额外的行。

查找GROUP BY - MSDN。我建议你先阅读语法示例之外的所有内容,然后看看该条款的目的是什么。

另外,下次尝试使用Google搜索您的问题:' GROUP BY,SQL'或者插入IDESSMS或其他)给出的错误代码。您需要了解为什么工作正常...... SO可以提供帮助,而不是您的Google搜索引擎。 ;)

希望您发现这开始您对学习SQL的所有兴趣。 :d