Sql 从表中逗号分隔的值中获取单个值
我有一个带有参考值的表和另一个作为选定参考值的表。在该表中,所选参考值以逗号分隔。如何从逗号分隔的值中获取单个值Sql 从表中逗号分隔的值中获取单个值,sql,sql-server,database,Sql,Sql Server,Database,我有一个带有参考值的表和另一个作为选定参考值的表。在该表中,所选参考值以逗号分隔。如何从逗号分隔的值中获取单个值 CREATE TABLE [DBO].[TBL_REFERENCE] ( /* REFERENCE TABLE */ REF_ID BIGINT IDENTITY(1, 1) NOT NULL ,REF_NUMBER INT NOT NULL ,REF_NAME NVARCHAR(20) ,REF_VALUE NVARCHAR(25)
CREATE TABLE [DBO].[TBL_REFERENCE]
(
/* REFERENCE TABLE */
REF_ID BIGINT IDENTITY(1, 1) NOT NULL
,REF_NUMBER INT NOT NULL
,REF_NAME NVARCHAR(20)
,REF_VALUE NVARCHAR(25)
,CONSTRAINT PK_REFERENCE PRIMARY KEY (REF_ID)
)
INSERT INTO TBL_REFERENCE (ref_number, ref_name, ref_value)
VALUES (1, 'communication', 'mobile'),
(1, 'communication', 'laptop'),
(1, 'communication', 'PDA'),
(1, 'communication', 'tabs'),
(1, 'communication', 'iphone'),
(1, 'communication', 'smart phone'),
(1, 'communication', 'others');
另一张桌子
CREATE TABLE [DBO].[TBL_FACILITY]
(
/* FACILITY TABLE */
FACILITY_ID BIGINT IDENTITY(1, 1) NOT NULL
,FAMILY_HEAD_ID BIGINT NOT NULL
,FACILITY_SELECTED INT --- REF_NAME
,FACILITY_USED NVARCHAR(25) --- ref_value
,CONSTRAINT PK_FACILITY PRIMARY KEY (FACILITY_ID)
)
INSERT INTO TBL_FACILITY (FAMILY_HEAD_ID, FACILITY_SELECTED, FACILITY_USED)
VALUES (121, 1, '2,6'), (122, 1, '5'), (123, 1, '5,6');
最终结果的格式:
121 communication laptop
121 communication smart phone
122 communication iphone
123 communication iphone
123 communication smart phone
如何获得此结果?假设作为标识列,
tbl\u引用。ref\u number
列的值按向下顺序为1,2,3,4,5,6,7,通过子字符串
和CHARINDEX
字符串运算符的贡献,可以使用以下SQL:
SELECT family_head_id, ref_name+' '+ref_value reference
FROM TBL_FACILITY INNER JOIN TBL_REFERENCE
ON ( ref_number = SUBSTRING(facility_used,CHARINDEX(',', facility_used)-1,1) )
UNION ALL
SELECT family_head_id, ref_name+' '+ref_value reference
FROM TBL_FACILITY INNER JOIN TBL_REFERENCE
ON ( ref_number = SUBSTRING(facility_used,CHARINDEX(',', facility_used)+1,1) )
ORDER BY 1, 2;
不应将多个值以逗号分隔存储在一列中。这是(a)违反了数据库设计的第一个标准形式,以及(b)一个非常糟糕的设计选择,因为它无法创建确保数据完整性的数据库级外键约束。您是否确定所有
tbl_reference.ref_number
列的值都是1或1,2,3,4,5,6,7作为标识列??如果有一个数据模型具有逗号分隔的值,您最好期望超过两个,例如,'1,2,3,4'
:-)