转换表的SQL查询

转换表的SQL查询,sql,database,excel,sap-ase,Sql,Database,Excel,Sap Ase,我在改造一张像这样的桌子时遇到问题 city | distributor | phno --------------------------------- new york xxx 12345 new york yyy 12312 new york zzz 12313 london aaa 12315 london bbb 11111 hong konk

我在改造一张像这样的桌子时遇到问题

city    | distributor | phno
---------------------------------
new york   xxx           12345

new york   yyy           12312

new york   zzz           12313

london     aaa           12315

london     bbb           11111

hong konk  ccc           12311
进入

考虑到任何城市都不会有超过3家经销商 我已经尝试过自动加入,但是我得到了重复的记录,请告知


让我知道这是否可以在excel中完成??由于这仅用于报告目的

我不确定它在Sybase SQL中是否有效,但我还是会从其他SQL Server中的类似内容开始:

SELECT * FROM 
    (SELECT city FROM table GROUP BY city) AS c
LEFT JOIN (SELECT TOP 1 distributor AS distributor1, phno AS phno1 
    FROM table c1 WHERE c1.city = c.city 
    ORDER BY distributor ASC) AS c1
    ON true
LEFT JOIN (SELECT TOP 2 distributor AS distributor2, phno AS phno2 
    FROM table c2 WHERE c2.city = c.city 
    ORDER BY distributor ASC) AS c2
    ON distributor1 != distributor2
LEFT JOIN (SELECT TOP 3 distributor AS distributor3, phno AS phno3 
    FROM table c3 WHERE c3.city = c.city 
    ORDER BY distributor ASC) AS c3
    ON distributor1 != distributor3 AND distributor2 != distributor3

我不确定它在Sybase SQL中是否有效,但我还是会从其他SQL服务器中的类似内容开始:

SELECT * FROM 
    (SELECT city FROM table GROUP BY city) AS c
LEFT JOIN (SELECT TOP 1 distributor AS distributor1, phno AS phno1 
    FROM table c1 WHERE c1.city = c.city 
    ORDER BY distributor ASC) AS c1
    ON true
LEFT JOIN (SELECT TOP 2 distributor AS distributor2, phno AS phno2 
    FROM table c2 WHERE c2.city = c.city 
    ORDER BY distributor ASC) AS c2
    ON distributor1 != distributor2
LEFT JOIN (SELECT TOP 3 distributor AS distributor3, phno AS phno3 
    FROM table c3 WHERE c3.city = c.city 
    ORDER BY distributor ASC) AS c3
    ON distributor1 != distributor3 AND distributor2 != distributor3

我认为这种转换最好在报表编写器中完成,而不是在数据库中。

我认为这种转换最好在报表编写器中完成,而不是在数据库中。

您也可以在SQL中透视表


您也可以在SQL中透视表


Sybase有TOP,而不是LIMIT,但我不确定它是否可以用于子查询。LIMIT对Sybase和SQL Server无效。使用“顶行”和“超行”代替“不通过分发服务器ASC获取此部分订单”,phno ASC偏移量0限制1,请您解释一下这个想法是按照严格的顺序对结果进行排序,以便数据库引擎不会意外获取相等的行。Sybase具有“顶行”,没有限制,但我不确定它是否可以用于子查询。限制对Sybase和SQL Server无效。使用顶部和上方的行代替标题我不通过分发服务器ASC获取此部分订单,phno ASC偏移量0限制1,请您解释一下这个想法是按照严格的顺序对结果进行排序,以便数据库引擎不会意外获取相等的行。您需要使用SQL实现吗?有许多报告工具,如Crystal和reporting services等。。。那就帮你做好了!我没有这些工具,我最好的工具是excel!!但我把它看作是更具挑战性的sql问题:-您需要使用sql实现它吗?有许多报告工具,如Crystal和reporting services等。。。那就帮你做好了!我没有这些工具,我最好的工具是excel!!但我认为这更像是对sql的挑战:-你是说像excel中的那样?这可能吗?我同意:使用Excel透视表可能更好。我通常不认为Excel是一个报告编写器,但它可能会起作用。我在想Crystal Reports、我多年来使用的Microsoft Access最佳报表编写器和ReportBuilder。你是说excel中的报表?这可能吗?我同意:使用Excel透视表可能更好。我通常不认为Excel是一个报告编写器,但它可能会起作用。我在想Crystal Reports、Microsoft Access这几年来我用过的最好的报告编写器和ReportBuilder。