1

我正在尝试运行一个 SELECT 语句,它将显示产品代码的所有可能输出。

目前,每个产品都有两列,ID(int)和colourcode(varchar)。对于产品 ID = 1 颜色代码 = 10,20,30

我想要的结果是:

110
120
130

我创建了一个可以正常工作的拆分函数,但在我的查询中我得到了错误

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我的查询是:

Select 
    p.ID, 
    (select items 
     from dbo.Split(pv.ColorSKUModifiers, ',')) 
from 
    product p 
join 
    ProductVariant pv on (pv.ProductID = p.ProductID)

任何人都可以帮忙吗?理想情况下,我希望将 ID 和项目连接起来,但这看起来更难做,因为我遇到了错误:无法解决 SELECT 语句中第 1 列的排序规则冲突。

4

2 回答 2

1

使用 across join获得两个表的笛卡尔积。如果你有 tableA(A) 和 tableB(B),那么语法是

select tableA.A, tableB.B 
from tableA
     cross join tableB

在你的情况下,像

Select product.ID, variants.items
from 
    product cross join
    (select dbo.Split(pv.ColorSKUModifiers,',') as items from productVariant pv )  variants
于 2013-10-17T09:10:23.217 回答
0

错误消息表明这dbo.Split是表值函数。在这种情况下,您应该使用cross apply运算符:

select p.ID, s.items as ColCode
from product p
    join ProductVariant pv on pv.ProductID = p.ProductID
    cross apply dbo.Split(pv.ColorSKUModifiers, ',') s

或者如果您需要连接 ID 和颜色代码:

select cast(p.ID as varchar(20)) + s.items
from product p
    join ProductVariant pv on pv.ProductID = p.ProductID
    cross apply dbo.Split(pv.ColorSKUModifiers, ',') s
于 2013-10-17T11:19:29.937 回答