2

我正在使用 T-SQL 和 Microsoft SQL Server。我有不同的表格,我想获得示例中的特定结果

我有 3 个包含不同成分的“食谱”表:

|Recipe X|       |Recipe Z|       |Recipe V|
__________       __________       __________
A                A                B
B                D                E
C                F                C

我也有一张桌子周:

Mon||Tue||Wed||Thu||Fri||Sat||Sun
---------------------------------
X  | Z |  X  | V  | Z  | V  | V

一周中的每一天都有一个食谱。我想知道哪一天有食谱和位置(例如星期一的位置是 1,星期二是 2...)

所以它看起来像

配方 X:(1, 3)

食谱 Z:(2, 5)

食谱五:(4、6、7)

我没有找到在 T-SQL 中做列表的方法如果还有其他方法可以这样做吗?

谢谢

4

2 回答 2

1

是的。规范化您的周表,使其具有日期、配方和职位字段。

Mon X 1
Tue Z 2

那么这是一个简单的查询

select position
from table
where recipe = 'z'

如果需要,您可以根据日期名称计算位置,反之亦然。

于 2013-10-15T06:28:43.587 回答
1

您使用的表结构使查询有些复杂,您应该真正查看@podiluska 的建议来规范化您的表。

也就是说,使用cte (or Common Table Expression)基本上“在运行时进行规范化”和常规查询来获得结果是可行的;

WITH cte AS (
  SELECT '1' day, Mon Recipe FROM Week UNION ALL
  SELECT '2' day, Tue Recipe FROM Week UNION ALL
  SELECT '3' day, Wed Recipe FROM Week UNION ALL
  SELECT '4' day, Thu Recipe FROM Week UNION ALL
  SELECT '5' day, Fri Recipe FROM Week UNION ALL
  SELECT '6' day, Sat Recipe FROM Week UNION ALL
  SELECT '7' day, Sun Recipe FROM Week
)
SELECT DISTINCT 'Recipe_' + Recipe AS Recipe,
   Days=STUFF((SELECT ','+day FROM cte WHERE Recipe=A.Recipe FOR XML PATH('')), 
                                                                  1 , 1 , '' )
FROM 
   cte A

一个用于测试的 SQLfiddle

于 2013-10-15T06:40:40.240 回答