2016-10-03 71 views
-2
05214M 2 BRAKE PAD METAL EACH 1992 POLARIS 400 XC/ XCR 
05214M 2 BRAKE PAD METAL EACH 1991 POLARIS 400 XC/ XCR 

你好给出的数据上面,我是试图把具有相同部件号(05214M)和同一型号的所有行(POLARIS 400 XC/XCR)达到这一结果,并创建使用年份和型号的标题。我如何使用SQL SELECT语句

所以我想要的标题为这一个是

BRAKE PAD METAL POLARIS 400 XC/ XCR 1991-1992 

这可能使用SQL?

+5

给我们表定义,也许我们可以提供帮助。 – Shadetheartist

+2

你正在使用哪些DBMS? –

+0

请提供您已经尝试过的表格和代码的模式。我们在这里帮助解决问题,而不是完全为您解决问题。 – Gasper

回答

2

使用最小值最大值和group by

select model, concat(min(`year`) , '-', max(`year`)) 
    from my_table 
    group by model 

如果你想有一个特定的模型,你可以使用where

select model, concat(min(`year`) , '-', max(`year`)) 
    from my_table 
    where model = '05214M' 
    group by model 

如果你想与单排和模型与模型不同的结果更多然后你可以使用这样的联合行

select model, concat(min(`year`) , '-', max(`year`)) 
    from my_table 
    group by model 
    having count(*)>1 
    union 
    select model, `year` 
    from my_table 
    group by model 
    having count(*) = 1 
+0

鉴于对1991年,1992年和1995年的评论......投票赞成。这似乎解决了所有的要求,并且实际上会起作用。其他版本不处理动态日期或使用SQL服务器上不可用的函数;或为此表达。 (除了在更新之前缺少''''),用户需要将模型+空格+标题或其他东西组合在一起并按组合字段组合。 – xQbert

+0

我已更新asnwer ..一些错误..更正 – scaisEdge

+0

@xObert正确我只使用..标准的SQL函数 – scaisEdge

-1

使用concat和组由

select concat(item,' ',model,' ',Min(year),'-',Max(year)) as title 
from Table_name 
group by sku; 
+1

认为这会抛出一个错误项目和模型必须在组中。不要认为express通过扩展支持mySQL的组。 – xQbert

1

如果由于某种原因,你不能使用GROUP BY你也可以做到这一点像这样一个窗口函数:

SELECT model, 
     CAST(min(year) over (partition by model order by year) as varchar(4)) + '-' + 
     CAST(max(year) over (partition by model order by year) as varchar(4)) as Date_Range 
FROM atable