2

长话短说,我对 T-SQL 相当陌生,我正在为我们的调度部门查询 JD Edwards 的一些信息。我们是一家制造工厂,包含我们的零件信息和制造每个零件的组件的表对所有组件使用单个列,每个组件都有多行,因此我们可以有一个包含 20 行的零件,我有两个这个查询的问题让我有点难过,第一个是我想在每个工作订单中看到一行,其中包含来自 WO 表的所有零件信息,我在以下查询中使用我们的成品零件编号:

此 WO 和成品的必要列的原始数据:

WALITM                      IXLITM                      WADOCO
TF2-10426IA                 CF-S1094P-UL                800059
TF2-10426IA                 CF-S1094P-UL                800059
TF2-10426IA                 CF-S1094P-UL                800059
TF2-10426IA                 CF-S1094P-UL                800059
TF2-10426IA                 TE2-06718                   800059
TF2-10426IA                 TE2-06718                   800059
TF2-10426IA                 TE2-06718                   800059
TF2-10426IA                 TE2-06718                   800059
TF2-10426IA                 RP-TR23                     800059
TF2-10426IA                 RP-TR23                     800059
TF2-10426IA                 RP-TR23                     800059
TF2-10426IA                 RP-TR23                     800059
TF2-10426IA                 RP-BX35                     800059
TF2-10426IA                 RP-BX35                     800059
TF2-10426IA                 RP-BX35                     800059
TF2-10426IA                 RP-BX35                     800059

(抱歉,今天显然是一个完整的 n00b,除了创建一个 HTML 表格之外,无法弄清楚如何将其格式化为表格)

    SELECT WO, TF, TE, CAP, LABEL
    FROM (SELECT DISTINCT Sched.dbo.TBS.WADOCO AS WO,
    Sched.dbo.TBS.WALITM AS TF,
    CASE WHEN Part.IXLITM LIKE 'TE%' THEN Part.IXLITM END AS TE,
    CASE WHEN Part.IXLITM LIKE 'CF%' THEN Part.IXLITM END AS CAP,
    CASE WHEN Part.IXLITM LIKE 'LBL%' THEN Part.IXLITM END AS LABEL
    FROM WB.dbo.Part
    INNER JOIN Sched.dbo.TBS ON TBS.WAAITM=Part.IXKITA) AS T2
    WHERE WO=800059

哪个产生:

WO          TF            TE          CAP            LABEL
800059      TF2-10426IA   NULL        NULL           NULL
800059      TF2-10426IA   NULL        CF-S1094P-UL   NULL
800059      TF2-10426IA   TE2-06718   NULL           NULL

我已经进行了几次其他尝试,将所有内容组合在一条线上,但没有任何运气,但我认为类似于“Group By”的东西会是理想的......

这个查询的第二部分也让我有点难过,尽管我承认我在上面做了更多的工作,但我需要从 IXLITM 列中提取更多数据Where IXKITA=[The TE2***] for the TF2*** Number

我认为在这两个问题之间,我可能会寻找 T-SQL 之外的解决方案,但我想我会首先向各位专家寻求一些见解。

在此先感谢您的帮助,我们将不胜感激!

4

2 回答 2

2

尝试这个:

SELECT WO, 
       TF, 
       TE, 
       CAP, 
       LABEL 
FROM   (SELECT DISTINCT WADOCO   AS WO, 
                        WALITM   AS TF, 
                        Max(CASE 
                              WHEN IXLITM LIKE 'TE%' THEN PART.IXLITM 
                              ELSE '' 
                            END) AS TE, 
                        Max(CASE 
                              WHEN IXLITM LIKE 'CF%' THEN PART.IXLITM 
                              ELSE '' 
                            END) AS CAP, 
                        Max(CASE 
                              WHEN IXLITM LIKE 'LBL%' THEN PART.IXLITM 
                              ELSE '' 
                            END) AS LABEL 
        FROM   PART 
        GROUP  BY WALITM, 
                  WADOCO)T2 
WHERE  WO = 800059 

SQL Fiddle上有一个可行的解决方案。

于 2012-10-15T18:07:32.693 回答
1
SELECT DISTINCT Sched.dbo.TBS.WADOCO AS WO,
Sched.dbo.TBS.WALITM AS TF,
TE.IXLITM AS TE,
CF.IXLITM AS CAP,
LBL.IXLITM AS LABEL
FROM Sched.dbo.TBS
LEFT JOIN WB.dbo.Part TE ON TBS.WAAITM = Part.IXKITA AND LEFT(Part.IXLITM,2) = 'TE'
LEFT JOIN WB.dbo.Part CF ON TBS.WAAITM = Part.IXKITA AND LEFT(Part.IXLITM,2) = 'CF'
LEFT JOIN WB.dbo.Part LBL ON TBS.WAAITM = Part.IXKITA AND LEFT(Part.IXLITM,3) = 'LBL'
WHERE WO=800059
于 2012-10-15T18:06:04.780 回答