0

[已解决:感谢 bluefeet 和 Brian,我必须构建这个工作查询(结果我还需要第四个表/视图)]"

SELECT        A.SalesLineID, A.ArticleResultID, B.ID, C.ID, D.Value
FROM            VIEWA AS A 
                INNER JOIN TABLEB AS B ON A.ArticleResultID = B.ArticleResultID 
                AND B.Name = N'Collect' AND DAPR.Value = 1 
                INNER JOIN TABLEC AS C ON B.ArticleResultID = C.ID 
                AND C.Name='Assemble' 
                AND C.Value = 1 
                INNER JOIN TABLED AS D ON D.ArticleResultID = C.ParentId 
                AND D.Name = 'IndexY'
WHERE        (A.SalesID = @SalesID)

[更新:我犯了一个错误,假设 IndexY/Color 和 ProdId 字段表 A 是某种参数/属性表,只有 5 列 ID - NAME - VALUE - ARTICLERESULTID - PRODID。IndexY 是 Name 字段的值..]

我无法构建正确的 sql 查询来完成这个技巧:

我有以下 2 个表:

Table A 
ID Name         Value   ArticleResultID     ProdID    Color
1  Operation    Collect             110         10    BLACK
2  IndexY            10             110         10    - 
3  Operation    Collect             101         11    WHITE


Table B
ID  ParentID    Name        Value       
101 110     Assemble        1       
101 100     Assemble        0     

脚步:

Find record in A with Name = Operation and Value = Collect and ProdId = 11 AS ORG_A
Find record in B With B.ID = ORG_A.ArticleResultId AND B.NAME = 'Assemble'AND B.VALUE = 1 AS B
Find record in A With A.ArticleResultID = B.ParentID as NEW_A

在上述场景中 ORG_A.ArticleResultID = 11 --> B.ParentID = 110 --> NEW_A.ARTICLERESULTID = 110 --> (IndexY - Value - 10)

非常感谢有人能告诉我如何构建这个查询..

最好的祝福,

迈克 D

[旧描述:]

我无法构建正确的 sql 查询来完成这个技巧:

我有以下 2 个表:

Table A 
Name        Value   ArticleResultID      IndexY      Color  ProdID
Operation   Collect             110         10           -       0
Operation   Collect             101         _        Black     100  


Table B
ID  ParentID    Name        Value   Dx      Dy
101 110     Assemble        1       1000    500 
101 100     Assemble        0       400     300

我想从 A 中获取所有记录,其中 NAME 等于 'operation',VALUE 等于 'Collect' 和 PRODID = '100' 但我还想要(这是我的问题)表 A 中记录的 IndexY 值和表 B 中的 PARENTID加入 TABLE B.ID = A.ArticleResultID AND Name = 'Assemble' 和 VALUE = '1'

在上面的场景中,ParentID 110 给了我表 A 中的记录,ArticleResultID 110 和 IndexY (10)。

非常感谢有人能告诉我如何构建这个查询..

最好的祝福,

迈克 D

4

2 回答 2

2

这对你有用吗?

SELECT a.*,c.IndexY
  FROM [TableA] a
  JOIN [TableB] b ON a.ArticleResultId = b.id
                 AND b.Name ='Assemble'
                 AND b.Value = 1
  JOIN [TableA] c ON b.ParentId = c.ArticleResultID
  WHERE a.name = 'Operation'
    AND a.Value = 'Collect'
    AND a.ProdId = 100
于 2012-04-17T22:12:01.993 回答
2

因为你的要求不是最清楚的。这个怎么样:

SELECT a1.*, a2.indexy as additionalIndexY
FROM ta a1
INNER JOIN tb b
    ON a1.articleresultid = b.id
INNER JOIN ta a2
    ON b.parentid = a2.articleresultid
WHERE a1.name = 'Operation'
    AND a1.prodid = 100
    AND b.name = 'Assemble'
    AND b.value = 1

这是一个带有工作版本的sqlfiddle

如果您只想要 110 articleresultid 的记录,那么:

SELECT a2.*
FROM ta a1
INNER JOIN tb b
    ON a1.articleresultid = b.id
INNER JOIN join ta a2
    ON b.parentid = a2.articleresultid
WHERE a1.name = 'Operation'
    AND a1.prodid = 100
    AND b.name = 'Assemble'
    AND b.value = 1

请参阅第二个示例的sqlfiddle

于 2012-04-17T22:20:05.540 回答