在SQL Server 2014 Management Studio中将行分组时检索单个字符串值

在SQL Server 2014 Management Studio中将行分组时检索单个字符串值,sql,sql-server,Sql,Sql Server,我正在组合一个查询,它试图将包含字符串值的一组列中的行分组在一起。我知道我可以用字符串值连接列,但我希望能够报告单个单元格值,而不是该组中的所有值 下面是我要查找的示例表和结果: 表: ID_Number Code Rating ------------------------------ 12345678901112 V 100 12345678901113 V 200 12345678901114 H 320 12345678981

我正在组合一个查询,它试图将包含字符串值的一组列中的行分组在一起。我知道我可以用字符串值连接列,但我希望能够报告单个单元格值,而不是该组中的所有值

下面是我要查找的示例表和结果:

表:

ID_Number       Code    Rating
------------------------------
12345678901112  V       100
12345678901113  V       200
12345678901114  H       320
12345678981112  V       300
12345678981113  V       200
12345699981113  D       700
到目前为止的查询:

SELECT 
    LEFT(Ex.ID_Number, 10) AS ID_Number, 
    ???(Ex.Code) AS Code, 
    MAX(Ex.Rating) AS Rating
FROM 
    dbo.Exampletable Ex
GROUP BY 
    LEFT(Ex.ID_Number, 10);
预期结果:

ID_Number   Code    Rating
---------------------------
1234567890  H       320
1234567898  V       300
1234569998  D       700
我目前的结果:

ID Number   Code    Rating
---------------------------
1234567890  NULL    320
1234567898  NULL    300
1234569998  NULL    700

获取预期结果集的一种方法是使用:

在MySQL中,您可以使用对派生表的联接,该派生表包含已聚合的
评级
值:

SELECT LEFT(t1.ID_Number,10) AS ID_Number,
       t1.Rating, t1.Code
FROM Exampletable AS t1
JOIN (
  SELECT LEFT(Ex.ID_Number,10) AS ID_Number, MAX(Ex.Rating) AS Rating
  FROM Exampletable 
  GROUP BY LEFT(Ex.ID_Number,10)
) AS t2 ON LEFT(t1.ID_Number,10) = t2.ID_Number AND t1.Rating = t2.Rating

要获得所需结果,您可以通过
ID\u Number
Rating
将现有结果与现有表连接起来。为此,可以使用
CTE
。此解决方案适用于
SQL Server

;WITH CTE_Result
AS
(   SELECT 
       LEFT(Ex.ID_Number,10) AS ID_Number, 
       MAX(Ex.Rating) AS Rating
    FROM dbo.Exampletable Ex
    GROUP BY LEFT(Ex.ID_Number,10)
)

SELECT CR.ID_Number, Ex.Code, CR.Rating
FROM CTE_Result CR
INNER JOIN dbo.Exampletable Ex 
   ON ID_Number = LEFT(Ex.ID_Number,10) AND Ex.Rating = CR.Rating
MySQL解决方案更新

SELECT
    CR.ID_Number, Ex.Code, CR.Rating
FROM
(   SELECT 
       LEFT(Ex.ID_Number,10) AS ID_Number, 
       MAX(Ex.Rating) AS Rating
    FROM dbo.Exampletable Ex
    GROUP BY LEFT(Ex.ID_Number,10)
) CR
INNER JOIN dbo.Exampletable Ex 
   ON ID_Number = LEFT(Ex.ID_Number,10) AND Ex.Rating = CR.Rating

很抱歉MySQL标签,这是一个错误点击了文章的建议标签区域。谢谢你的回答,我会看看我是否可以用第一个答案来解决我的问题。很抱歉MySQL标签,这是在文章的建议标签区域上的错误点击。谢谢你的回答,我会看看我是否能用这个答案来解决我的问题。
SELECT
    CR.ID_Number, Ex.Code, CR.Rating
FROM
(   SELECT 
       LEFT(Ex.ID_Number,10) AS ID_Number, 
       MAX(Ex.Rating) AS Rating
    FROM dbo.Exampletable Ex
    GROUP BY LEFT(Ex.ID_Number,10)
) CR
INNER JOIN dbo.Exampletable Ex 
   ON ID_Number = LEFT(Ex.ID_Number,10) AND Ex.Rating = CR.Rating