You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面试题:编写T-SQL查询获取指定结果集

T-SQL 查询实现目标结果集方案

嘿,我来帮你搞定这个T-SQL查询问题!根据你给出的目标结果集样式,我先假设你的原始数据表(比如命名为FruitSales)包含以下字段:

  • SaleDate DATE:销售日期
  • FruitName VARCHAR(50):水果名称(对应目标里的Apple、Banana、Cherry)
  • SalesAmount INT:销售数量

如果你的实际表结构或字段名不同,只需要对应替换即可。下面提供两种常用的实现方式:

方法1:使用PIVOT函数(适合固定列的场景)

PIVOT是SQL Server专门用于行转列的函数,代码简洁直观:

SELECT
    SaleDate AS [Date],
    Apple,
    Banana,
    Cherry
FROM
    FruitSales
PIVOT
(
    SUM(SalesAmount)  -- 如果是求数量用SUM,求平均值用AVG,根据需求调整
    FOR FruitName IN (Apple, Banana, Cherry)  -- 指定要转成列的类别值
) AS PivotedSales
ORDER BY SaleDate;

说明:

  • 如果你的数据中同一日期+水果有重复记录,SUM会自动汇总,要是确保唯一可以用MAX或者MIN
  • ORDER BY SaleDate是为了让结果按日期排序,和目标集的顺序一致

方法2:使用CASE WHEN(灵活适配动态列或复杂场景)

如果后续可能新增水果类别,或者需要更灵活的逻辑,用CASE WHEN的方式更可控:

SELECT
    SaleDate AS [Date],
    SUM(CASE WHEN FruitName = 'Apple' THEN SalesAmount ELSE 0 END) AS Apple,
    SUM(CASE WHEN FruitName = 'Banana' THEN SalesAmount ELSE 0 END) AS Banana,
    SUM(CASE WHEN FruitName = 'Cherry' THEN SalesAmount ELSE 0 END) AS Cherry
FROM
    FruitSales
GROUP BY SaleDate
ORDER BY SaleDate;

说明:

  • 这里用SUM配合CASE WHEN,把符合条件的数值累加,不符合的记为0
  • 要是不需要汇总,比如每行都是唯一的日期+水果,也可以用MAX代替SUM

如果你的原始数据结构和我假设的不一样,比如字段名、类别名称不同,只需要替换对应的部分就行。比如如果类别是A/B/C,就把Apple这些换成A/B/C即可。

内容的提问来源于stack exchange,提问作者user1469712

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:17:42