将行转换为列 - 单个表格

3

我有一张表,其中每个对象有几行。我试图将这些行分组,使它们基于一个链接列形成一列。我已经有了一些可以实现这个目的的SQL语句,但是现在我不知道如何根据另一个字段来设置条件。

******************************************************
* id * page_id *   key   *    value      *   uuid    *
******************************************************
* 1  *    1    *   type  *     url       * 654978654 *
******************************************************
* 2  *    1    * picture * 654978654.png * 654978654 *
******************************************************
* 3  *    1    *   url   *   google.com  * 654978654 *
******************************************************
* 4  *    1    *  active *      1        * 654978654 *
******************************************************

所以这基本上只是表中的一条记录。我希望我的选择器只在每个uuid的活动状态设置为1时才起作用。以下是我用来将行转换为列的SQL(它确实有效)。

Select uuid
    , Min( Case When meta_key = "type" Then meta_value End ) As Type
    , Min( Case When meta_key = "picture" Then meta_value End ) As Picture
    , Min( Case When meta_key = "url" Then meta_value End ) As URL
    , Min( Case When meta_key = "active" Then meta_value End ) As Active
From sm_page_meta
Where meta_key In("type","picture","url","active")
Group By uuid
1个回答

2
只需要添加一个 having 子句:
Select uuid
    , Min( Case When meta_key = 'type' Then meta_value End ) As Type
    , Min( Case When meta_key = 'picture' Then meta_value End ) As Picture
    , Min( Case When meta_key = 'url' Then meta_value End ) As URL
    , Min( Case When meta_key = 'active' Then meta_value End ) As Active
From sm_page_meta
Where meta_key In('type', 'picture', 'url', 'active')
Group By uuid
Having Active = '1';

如果你不想在结果集中包含 Active,只需将整个表达式放在 HAVING 子句中。


这真是太简单了。哈哈。在网上找不到任何相关信息。感谢您的帮助。 - softlyspoken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接