在我的表格中,我有一个“名称”列和一个“状态”列 状态是真还是假 另一个表包含一个总数量的数字。
我想得到的结果是一个包含两列的表:
名字|状态
和数据的例子:
a |可
a |可
a |不可用的
a |不可用的
a |可用
当“a”位于名称列中且可用性是状态列时。
第二个表中的总金额表示我需要拥有的“a”行的总数,状态取决于原始表中状态列的true / false。
如果状态为“true”,我需要写“可用”,当“假”时,“不可用”。
如果总金额值大于第一张表中的数据,我需要根据总金额添加行,状态为“可用”。
例如,如果我有3条“a”记录,当一条状态为“true”而另外两条状态为“false”时,总数为4,结果我需要得到4条名称为“a”的行,其中2个为“available”,2个为“not available”(给定3行,加上一行使其为4)。
我的问题是,如何根据表格中的数据更改值? (写可用/不可用)
如何添加具有预设值的一定数量的行(与之前的名称相同,以及“可用”状态)?
答案 0 :(得分:1)
“...如何根据表格中的数据更改值?”
您可以使用CASE()
来测试列的值。
SELECT name,
CASE WHEN status = 'true'
THEN 'available'
ELSE 'not available'
END status
FROM tableName
答案 1 :(得分:0)
对于未来的求职者:
获得“假冒”'行,一种方法是使用递归CTE:
WITH Expanded_Data as (SELECT Counted_Data.name,
CAST('true' as VARCHAR(5)) as status,
Counted_Data.count + 1 as count,
Total.count as limit
FROM (SELECT name, COUNT(*) as count
FROM Data
GROUP BY name) Counted_Data
JOIN Total
ON Counted_Data.name = Total.name
AND Counted_Data.count < Total.count
UNION ALL
SELECT name, status, count + 1, limit
FROM Expanded_Data
WHERE count < limit)
SELECT name, CASE WHEN status = 'true'
THEN 'available'
ELSE 'not available' END
FROM (SELECT name, status
FROM Data
UNION ALL
SELECT name, status
FROM Expanded_Data) d;
(有一个有效的SQL Fiddle example。)
我有点担心源数据中的初始重复;我只能希望有更多独特的&#39;信息也是如此。