链接单列中的多个值 [duplicate]

Link Multiple values in Single Column [duplicate]

提问人:Ruan du Preez 提问时间:11/15/2023 最后编辑:Ruan du Preez 更新时间:11/15/2023 访问量:51

问:

日安

我有一个包含我所有数据的表格。在列产品中,有链接到索引表的值,但不是单个值,而是多个值,即 900;190;170.如果它是一个值,我只会在列产品上的两个表之间使用左连接。有没有办法将其与多个值联系起来?900 = 其他,190 = 书籍,170 = 钢笔。另一个问题是,它可以是 Product 列中任意数量的值。

谢谢 阮

sql-server sql-server-2008

评论

0赞 jarlh 11/15/2023
在寻求 SQL 帮助时,一个最小的可重现示例是一个很好的开始。
5赞 Dai 11/15/2023
你应该首先纠正你的数据库设计 - 你能做到这一点吗?
1赞 siggemannen 11/15/2023
使用 STRING_SPLIT 将列拆分为多行,然后从那里开始:learn.microsoft.com/en-us/sql/t-sql/functions/...
2赞 siggemannen 11/15/2023
您可以检查 stackoverflow 中的字符串拆分函数,我相信有很多:)顺便说一句,这就是为什么在问题中将您的 sql server 版本附加为标签 / 还不错的原因
1赞 xQbert 11/15/2023
考虑:stackoverflow.com/questions/10914576/t-sql-split-string

答:

0赞 Jophy job 11/15/2023 #1
-- create a table
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name varchar(20)  NOT NULL
);
CREATE TABLE productsIndex (  
  indexName varchar(120)  NOT NULL,
  itemIndex varchar(20)  NOT NULL
);

-- insert some values
INSERT INTO products VALUES (900, 'Books');
INSERT INTO products VALUES (800, 'Other');
INSERT INTO products VALUES (190, 'Pen');

-- insert some values
INSERT INTO productsIndex VALUES ('900;190;170', 'test');
INSERT INTO productsIndex VALUES ('800;100', 'test2');

SELECT p.* ,pi.itemIndex
    FROM products p
    join productsIndex pi
        on p.id  in (SELECT value FROM STRING_SPLIT(pi.indexName, ';'))

评论

0赞 GuidoG 11/15/2023
OP在评论中提到他正在使用sql server 2008,不幸的是,它还没有string_split功能