【问题标题】:MySQL SELECT - Switch Row With ColumnMySQL SELECT - 用列切换行
【发布时间】:2014-03-21 15:01:49
【问题描述】:

对于标题缺乏解释,我深表歉意,因为我不知道我真正想要做什么,如果你知道我在找什么,请修改。

这是我当前的表:

prodID | seller  |  price
123      seller1    5000
123      seller2    3000
123      seller3    5500
123      seller4    3500
500      seller2    55
500      seller5    60
200      seller1    35
200      seller2    25
200      seller3    35

现在我想在上面GROUP BYprodID 并将每一列列为卖家价格,可能是NULL,即:

prodID  | seller1 | seller2 | seller3 | seller4 | seller5
123       5000      3000      5500      3500      null
500       null      55        null      null      60
200       35        25        35        null      null

我不知道有多少独特的卖家,所以认为它们是动态的而不是固定的。

我认为我不需要 PIVOT TABLE 来自我一直在研究的内容,但如果有错误请纠正我。我也尝试过UNION 并合并同一张表,但这似乎效率低下,因为我不知道有多少卖家以及他们的名字:

效率低下:

SELECT 
    MT.prodID, MT.price, CT.price
from
    `table` MT,
    `table` CT
WHERE
    MT.prodID = CT.prodID
        AND MT.seller != CT.seller
GROUP BY MT.prodID

【问题讨论】:

标签: mysql select union pivot-table


【解决方案1】:

好吧,如果您不尝试使用PIVOT TABLE 并且无法使用其他编程语言执行此操作(这将是最好的选择)...您可以这样做。

SELECT 
    t.prodID, 
    t1.seller1, 
    t.seller2, 
    t2.seller3, 
    t3.seller4, 
    t4.seller5 
FROM 
(
    SELECT
        m1.prodID, m1.price AS seller2
    FROM myTable AS m1
    WHERE m1.seller LIKE "seller2"
) AS t

LEFT JOIN
(
    SELECT
        m.prodID,
        m.price AS seller1
    FROM myTable AS m
    WHERE m.seller LIKE "seller1"
) AS t1 ON t.prodID = t1.prodID

LEFT JOIN
(
    SELECT
        m2.prodID, 
        m2.price AS seller3
    FROM myTable AS m2
    WHERE m2.seller LIKE "seller3"
) AS t2 ON t2.prodID = t.prodID

LEFT JOIN
(
    SELECT
        m3.prodID, 
        m3.price AS seller4
    FROM myTable AS m3
    WHERE m3.seller LIKE "seller4"
) AS t3 ON t3.prodID = t.prodID

LEFT JOIN
(
    SELECT
        m4.prodID, 
        m4.price AS seller5
    FROM myTable AS m4
    WHERE m4.seller LIKE "seller5"
) AS t4 ON t4.prodID = t.prodID

这有点笨拙,但它会根据您的请求转置您的数据。查看 sql fiddle 的结果...http://sqlfiddle.com/#!2/55f59/45

【讨论】:

  • 我喜欢这个想法,尽管它不是最好的方式,因为我的动态卖家(目前有 108 个)。我愿意做一个PIVOT TABLE,因为我的动态卖家,我只是不知道可以用程序完成。
  • 真的你应该用另一种编程语言来做这件事......我不知道你使用的是哪一种......但你可以很容易地用几行代码在不同的编程中转置所有数据语言
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多