SQL-选择列并基于枚举添加记录
我在弄清楚如何设置查询时遇到了一些问题 我有一个简单的2列表,将对象id(int)与标记(string)相匹配。还有一个遗留数据类型,对象类型(int),我希望将其从查询转换为标记。例如:SQL-选择列并基于枚举添加记录,sql,enums,Sql,Enums,我在弄清楚如何设置查询时遇到了一些问题 我有一个简单的2列表,将对象id(int)与标记(string)相匹配。还有一个遗留数据类型,对象类型(int),我希望将其从查询转换为标记。例如: tagtable:={ID,TAG}:(1,FOO),(1,MINT),(2,BAR),(3,FOOBAR),(5,SAUCY) 对象表:={ID,…,TYPE}:(1,…,0),(2,…,0),(3,…,1),(4,…,SAUCY) 并且类型通过以下方式传输到标记(同样是一个示例) [0->AWESOME]
tagtable:={ID,TAG}:(1,FOO),(1,MINT),(2,BAR),(3,FOOBAR),(5,SAUCY)
对象表:={ID,…,TYPE}:(1,…,0),(2,…,0),(3,…,1),(4,…,SAUCY)
并且类型通过以下方式传输到标记(同样是一个示例)
[0->AWESOME],[1->SUPER]
因此,我的目标是创建一个查询,使用此数据返回:
返回表:={ID,TAG_NAME}:(1,AWESOME),(1,FOO),(1,MINT),(2,AWESOME),(2,BAR),(3,FOOBAR),(3,SUPER),(4,SAUCY),(5,SAUCY)
我该怎么设置这个呢?我尝试对对象类型使用case语句,但无法编译查询。。。我希望这不会太难创建。在我看来就像一个简单的联盟:
SELECT ID, TAG FROM TagTable
UNION ALL
SELECT ID, CASE
WHEN TYPE=0 THEN 'AWESOME'
WHEN TYPE=1 THEN 'SUPER'
{etc}
END AS TAG
FROM ObjectTable
尽管您可能需要使用对象表中的类型进行一些额外的连接来获取您的类型名。您没有提到“Awesome”和“Super”在数据库中的来源。假设
TRANSER_TABLE := {ID, Name} : (0, AWESOME), (1, SUPER)
你可以这样写:
select ID, TAG
from TAG_TABLE
UNION ALL
select o.ID, t.Name
from
OBJECT_TABLE o
join TRANSER_TABLE t on o.TYPE = t.ID
这些将是静态定义的名称。它们在对象表中有名称,但表示为int而不是字符串。(遗留的东西)所以你在工会的下半部分做了一个案例陈述。当Type=0时,则为“Awesome”,以此类推。在UNION ALL运算符的第二个操作数中不需要“AS TAG”。属性名仅由第一个操作数定义。如果为True,则不需要它。我只是为了便于阅读而把它放在那里。谢谢你的通用格式,这会非常方便的!:)