在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