假设我的桌子上有五根柱子。
第1栏:商店名称;第2至第5栏:存储类型
对于商店的名称,它基本上只包含商店的名称。对于列2-5,它将包含“是”或“否”,这取决于存储类型。例如:
StoreName | Clot. | Food | App. | Shoes
Mcdonalds | NO | YES | NO | NO
MC ShoeStore | NO | NO | NO | YES现在,我想提出一个查询,在这个查询中,我将显示以字母M开头的所有商店,以及它们的存储类型,而不显示带有“NO”的其他商店类型。
我只知道:
SELECT NameOfStore from table where NameOfStore LIKE '%m'我不确定如何显示包含YES的商店类型。那有可能吗?
发布于 2016-07-21 08:12:03
您可以简单地使用case语句。此外,您的WHERE子句标准也是错误的。
SELECT
NameOfStore,
CASE
WHEN Clothes = 'YES' THEN 'Clothes'
WHEN Fastfood = 'YES' THEN 'Fastfood'
WHEN Appliances = 'YES' THEN 'Appliances'
WHEN Shoes = 'YES' THEN 'Shoes'
END AS TypeOfStore
FROM
table
WHERE
LOWER(NameOfStore) LIKE 'm%';处理单个存储的多个存储类型:
SELECT
NameOfStore,
CONCAT_WS(' & ', --This is the separator to use - you can replace this with whatever
CASE WHEN Clothes = 'YES' THEN 'Clothes' END,
CASE WHEN Fastfood = 'YES' THEN 'Fastfood' END,
CASE WHEN Appliances = 'YES' THEN 'Appliances' END,
CASE WHEN Shoes = 'YES' THEN 'Shoes' END
) AS TypeOfStore
FROM
table
WHERE
LOWER(NameOfStore) LIKE 'm%';您的输出将类似于:
NameOfStore | TypeOfStore
-----------------------------
McDonalds | Fastfood
Mike's Shop | Clothes & Shoes发布于 2016-07-21 08:17:49
为了更灵活,我建议您首先更改数据的结构。
表存储
+--+---------+-------------+
|id|name |store_type_id|
+--+---------+-------------+
| 1|Mcdonalds| 2|
| 2|Mc Shoes | 4|表store_type
+--+-----------+
|id|name |
+--+-----------+
| 1|Clothing |
| 2|Fastfood |
| 3|Applicances|
| 4|Shoes |然后,您可以简单地将商店类型加入到商店中。
SELECT
store.name,
store_type.name AS store_type
FROM
store
LEFT JOIN store_type ON store.store_type_id = store_type.id如果一个存储可以有多个类型,您将使用结合表来链接这两个类型,而不是存储表中的store_type_id列。
表store_store_types
+--------+-------------+
|store_id|store_type_id|
+--------+-------------+
| 1| 2|
| 2| 1|
| 2| 4|而查询..。
SELECT
store.name,
store_type.name AS store_type
FROM
store
LEFT JOIN store_store_type rel ON store.id = rel.store_id
LEFT JOIN store_type ON rel.store_type_id = store_type.idhttps://stackoverflow.com/questions/38498393
复制相似问题