- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我有一个输入订单的系统,每个订单都可以附加任意数量的债券、工作和项目编号。 OrderDetails
表包含一个 orderID
,用于转到 OrderNumbers
表并获取该订单的所有附加“数字”,然后根据在那里找到 numType 列,它会转到三个表(债券、作业、项目)之一并检索为用户显示和打印的实际数字。
这意味着,如果该订单附加了 3 个项目编号,则尝试查询订单以搜索特定项目编号可能会为同一订单返回 3 行。
我希望能够返回只有 1 行订单的查询结果,并且一列包含所有 3 个以分隔形式的项目,这可能吗?
这是我当前的查询,当订单附加多个相同类型的数字时,每个订单返回多行...
SELECT
ISNULL(b.Descr,'') as Bond, ISNULL(PO.Description,'') as PO,
ISNULL(j.Descr,'') as Job, ISNULL(Proj.Descr,'') as Project,
d.OrdNbr, d.BillofLadingNbr, d.TripAndDeliveryTicketNbr
FROM
OrderDetail d
LEFT JOIN
OrderItemNumbers n ON d.OWID = n.LoadOWID
LEFT JOIN
Bond b ON n.NumberOWID = b.OWID AND n.NumType = 0
LEFT JOIN
PONumbers PO ON n.NumberOWID = PO.OWID AND n.NumType = 1
LEFT JOIN
Job j ON n.NumberOWID = j.OWID AND n.NumType = 2
LEFT JOIN
Project Proj ON n.NumberOWID = Proj.OWID AND n.NumType = 3
WHERE
d.OWID = 'BTBD1004'
这是我得到的结果......
Bond PO Job Project OrdNbr BillofLadingNbr
82001-8177-44 BTBD000063 BTBD000072
4.158 Kingsport BTBD000063 BTBD000072
IME-81-1(118) BTBD000063 BTBD000072
这就是我想要得到的......(基本上展平前 4 列)
Bond PO Job Project OrdNbr BillofLadingNbr
4.158 Kingsport 82001-8177-44, IME-81-1(118) BTBD000063 BTBD000072
任何帮助表示赞赏!谢谢,道格
最佳答案
根据您的示例,Bond
和 Job
表上似乎没有匹配的记录。如果有的话,你会得到这样的东西:
BOND PO JOB PROJECT ORDNBR BILLOFLADINGNBR
Some bond BTBD000063 BTBD000072
4.158 Kingsport BTBD000063 BTBD000072
Some job BTBD000063 BTBD000072
82001-8177-44 BTBD000063 BTBD000072
IME-81-1(118) BTBD000063 BTBD000072
该结果集看起来非常“稀疏”,因为您直接将 OrderItemNumbers
连接到主查询中:该表对于每个子表都有一个不同的行(PONumbers
,Job
、Project
),这样您就可以将每个连接放在一个不同的、分隔的行中。为了避免这种情况,您可以将 OrderItemNumbers
与 each 子表联接起来,然后将此子查询与 OrderDetail
联接起来(通过共享 加载OWID
):
SELECT
ISNULL(b.Descr, '') as Bond,
ISNULL(PO.Description, '') as PO,
ISNULL(j.Descr, '') as Job,
ISNULL(Proj.Descr, '') as Project,
d.OrdNbr,
d.BillofLadingNbr,
d.TripAndDeliveryTicketNbr
FROM
OrderDetail d
LEFT JOIN (
SELECT aux.*, n.*
FROM Bond aux INNER JOIN OrderItemNumbers n ON n.NumberOWID = aux.OWID AND n.NumType = 0
) AS b
ON b.LoadOWID = d.OWID
LEFT JOIN (
SELECT aux.*, n.*
FROM PONumbers aux INNER JOIN OrderItemNumbers n ON n.NumberOWID = aux.OWID AND n.NumType = 1
) AS PO
ON PO.LoadOWID = d.OWID
LEFT JOIN (
SELECT aux.*, n.*
FROM Job aux INNER JOIN OrderItemNumbers n ON n.NumberOWID = aux.OWID AND n.NumType = 2
) AS j
ON j.LoadOWID = d.OWID
LEFT JOIN (
SELECT aux.*, n.*
FROM Project aux INNER JOIN OrderItemNumbers n ON n.NumberOWID = aux.OWID AND n.NumType = 3
) AS Proj
ON Proj.LoadOWID = d.OWID
WHERE
d.OWID = 'BTBD1004'
这样你会得到以下结果:
Bond PO Job Project OrdNbr BillofLadingNbr
Some bond 4.158 Kingsport Some job 82001-8177-44 BTBD000063 BTBD000072
Some bond 4.158 Kingsport Some job IME-81-1(118) BTBD000063 BTBD000072
我同意这并不完全是您所要求的。您似乎还需要对 Project
表进行某种“部分旋转”(至少)。
理论上这也是可能的,但我不会那样做。这显然是一个表示需求,而在SQL层实现它的成本实在是太高了。
编辑
为了获得完整的平面结果集,您可以这样做(基于 this SO answer ):
DECLARE @bonds VARCHAR(MAX)
DECLARE @numbers VARCHAR(MAX)
DECLARE @jobs VARCHAR(MAX)
DECLARE @projs VARCHAR(MAX)
DECLARE @owid VARCHAR(10) = 'BTBD1004'
SELECT
@bonds = COALESCE(@bonds + ', ', '') + aux.Descr
FROM
Bond aux
INNER JOIN OrderItemNumbers n
ON n.NumberOWID = aux.OWID AND n.NumType = 0
WHERE
n.LoadOWID = @owid
SELECT
@numbers = COALESCE(@numbers + ', ', '') + aux.Description
FROM
PONumbers aux
INNER JOIN OrderItemNumbers n
ON n.NumberOWID = aux.OWID AND n.NumType = 1
WHERE
n.LoadOWID = @owid
SELECT
@jobs = COALESCE(@jobs + ', ', '') + aux.Descr
FROM
Job aux
INNER JOIN OrderItemNumbers n
ON n.NumberOWID = aux.OWID AND n.NumType = 2
WHERE
n.LoadOWID = @owid
SELECT
@projs = COALESCE(@projs + ', ', '') + aux.Descr
FROM
Project aux
INNER JOIN OrderItemNumbers n
ON n.NumberOWID = aux.OWID AND n.NumType = 3
WHERE
n.LoadOWID = @owid
SELECT
@bonds,
@numbers,
@jobs,
@projs,
d.OrdNbr,
d.BillofLadingNbr,
d.TripAndDeliveryTicketNbr
FROM
OrderDetail d
WHERE
d.OWID = @owid
这将导致:
Bond PO Job Project OrdNbr BillofLadingNbr
Some bond 4.158 Kingsport Some job 82001-8177-44, IME-81-1(118) BTBD000063 BTBD000072
如果您也为同一个 OWID
获得许多债券 x 许多 PO x 许多工作,那么它就会起作用。
恕我直言,这很好地说明了我想说的:是的,它满足了您的需要,但它丑陋得要命。当然,如果您不在乎,请继续(只需添加一些触发器,您就会感觉又回到了 1995 年 :P )。
希望有帮助。
关于SQL Server : flatten results from One to Many query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002792/
torch.flatten() 和 torch.nn.Flatten() 有什么区别? 最佳答案 扁平化在 PyTorch 中以三种形式提供 作为张量方法(oop 风格) torch.Tensor.f
我有以下(不完整的)功能: /* Populates char* name with the named location of the ith (flat) element * of an arr
我正在尝试使用 Keras 和基于 Marcin 的 PS3 示例的 Tensorflow 后端构建一个可变长度序列分类模型:https://stackoverflow.com/a/42635571/
我开始使用 keras 和 tensorflow 进行深度学习。在最初阶段,我有一个疑问。当我使用 tf.contrib.layers.flatten (Api 1.8) 用于拼合图像(也可以是多 c
鉴于以下SVG: 是否有任何工具可以通过变换自动更新路径点,并从组元素中删除变换? 我有一个SVG应用程序(草图),它使用转换属性(如果您
我目前有一个 Python 脚本,它使用 flatten 函数来展平 JSON 对象,然后我将使用 json_normalize将扁平的 JSON 转换为 DataFrame。 import pand
我注意到Option.flatten是defined,如下所示: def flatten [B](隐式ev:A To) with Serializable ... implicit def conf
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
这个问题在这里已经有了答案: How to flatten tree via LINQ? (15 个答案) 关闭 6 年前。 我有一个嵌套类: class Item {
我有下表: group_id amount type 1 10 1 1 2 1 1 5 2 1
我有兴趣实现一个通用的 flatten一个容器的容器 为了简化,我会使用自己的容器。主要原因是标准容器接收分配器的附加模板参数,这对我编写操作来说更复杂。因此,考虑容器 Vector , List等让
给定如下列表(我的实际列表比这个长,列表中至少有100个子列表): [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange S
这个问题在这里已经有了答案: Flatten an irregular (arbitrarily nested) list of lists (51 个答案) 关闭 5 年前。 我有一个不规则的数据
我创建了一个函数,它接受输入变量的向量,并为每组输入返回一个元胞数组。最终输出变量 (out) 似乎由一个包含两个 1x5 单元格的 2x1 单元格组成。我在下面提供了截图: 我只是想弄清楚如何将元胞
我正在尝试编写一个方法,它将接受一个由字符 0、1 和 ? 组成的字符串,并返回由原始字符串表示的一组字符串,将 ? 作为通配符,可以是 0 或 1。例如,如果输入是 "011?0",则输出应该是 [
假设我有一堆从 Pig UDF 生成的数据包,其中包含多个字符串元组。我怎样才能将它们全部从数据包中拉出来并简单地使每个字符串成为它自己的数据“行”。 databags = FOREACH 数据生成
所以我的目标是: fruitColourMapping = [{'apple': 'red'}, {'banana': 'yellow'}] 到 finalMap = {'apple': 'red',
我需要使用 Serialize 和 Deserialize 的自定义实现,但我不知道如何做 #[serde(flatten)] 有没有人知道? 注意:我知道我可以将较低元素的完整实现完全重写到较高元素
我有一个 FLATTEN LAMBDA 函数,可以将数组中的数据展平。这很好用,但我想集成另一个数组参数,这样我就可以使用不连续的范围。 在我的示例中,A1:B6 范围位于 array 中并返回展平数
我是一名优秀的程序员,十分优秀!