我似乎反对这个问题很多,我的数据格式如下:
+----+----------------------+
| id | colors |
+----+----------------------+
| 1 | Red,Green,Blue |
| 2 | Orangered,Periwinkle |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)
但我希望它的格式如下:
+----+------------+
| id | colors |
+----+------------+
| 1 | Red |
| 1 | Green |
| 1 | Blue |
| 2 | Orangered |
| 2 | Periwinkle |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?什么是这种操作甚至叫做?
我想在关系数据库中存储一个数字列表(基本上是数学术语中的一组),特别是SQL Server 2005.
理想情况下,我希望它是给定表上的单个列,但我愿意听到任何解决方案.我需要存储的数据就像我说的那样,是一组数字.
此列用于存储该行适用的给定进程的所有"步骤编号".因此,每行可以以任何顺序,范围或顺序应用于一个或多个步骤.可能的最大步数(最大范围,基本上)在行与行之间是不同的,但我高度怀疑它们中的任何一个都会达到数百个,因此在99.9%的情况下,最大值不应超过20或30,而我如果有任何接近100的话,我会感到惊讶.每一行都保证最少有一个值(步骤)(即没有任何步骤适用于任何步骤没有意义),但我想象这就像设置列一样简单not null.
然而,它存储,我希望它很容易搜索.例如,我宁愿不必通过大量的箍来编写SQL查询来查找适用于"步骤3"的所有行.如果给定的行有几个适用的步骤(例如,2,3,7和8),则在步骤3搜索时匹配它应该不太困难.
此外,虽然我希望在查看原始数据时能够产生某种逻辑意义(对于任何需要在系统上工作的人,我不在后问,因此他们不必阅读厚文档弄清楚我的模糊编码),我愿意妥协.因此,将列表编码成可以被可靠解码的内容是可接受的.
如果这是一个骗局我道歉 - 我一直在谷歌搜索,但我怀疑我的这个问题不知道要搜索什么或如何短语或称之为找到我正在寻找的东西.
在更多的注释中,我想知道这不是关系数据库不足的领域之一.不幸的是,我在这里没有选择.我必须将它存储在SQL Server中.我担心,单独保存到文件或其他持久性数据存储是不可能的.
我有这样一张桌子:
设备
DeviceId Parts
1 Part1, Part2, Part3
2 Part2, Part3, Part4
3 Part1
Run Code Online (Sandbox Code Playgroud)
我想创建一个表'Parts',将Parts栏中的数据导出到新表中.之后我将删除Parts列
预期结果
部分
PartId PartName
1 Part1
2 Part2
3 Part3
4 Part4
Run Code Online (Sandbox Code Playgroud)
DevicePart
DeviceId PartId
1 1
1 2
1 3
2 2
2 3
2 4
3 1
Run Code Online (Sandbox Code Playgroud)
我可以在不使用游标的情况下在SQL Server 2008中执行此操作吗?
如果我有一个名为"Categories" science,maths,english的列,如下所示,以逗号分隔的行显示,如何匹配包含类别的所有行maths?
我尝试过一个简单的LIKE但是不太准确,因为搜索时可能会有'poo_science' '%science%'会匹配两者.
我查看了StackOverflow并且有很多类似的问题但是所有人似乎都希望将数据作为逗号分隔列表或其他东西返回 - 这不是我所追求的.
我不想使用存储过程,也不能使用全文搜索.我有一个我使用的存储过程,('$')在每个值周围添加了另一个字符,然后搜索'$value$'...这是太讨厌了吗?我采用了一种更简单的方法.
csv ×2
sql ×2
sql-server ×2
comma ×1
format ×1
group-concat ×1
mysql ×1
pivot ×1
t-sql ×1
types ×1