質問

2つのクエリが組み合わされています UNION ALL1:

--Query 1
SELECT Flavor, Color
FROM Friends

 

--Query 2
SELECT Flavor,
    (SELECT TOP 1 Color
     FROM Rainbows
     WHERE Rainbows.StrangerID = Strangers.StrangerID
     ORDER BY Wavelength DESC
    ) AS Color
FROM Strangers

もちろん、どちらも別々に正常に動作しますが、 UNION ALL:

SELECT Flavor, Color
FROM Friends

UNION ALL

SELECT Flavor,
    (SELECT TOP 1 Color
     FROM Rainbows
     WHERE Rainbows.StrangerID = Strangers.StrangerID
     ORDER BY Wavelength DESC
    ) AS Color
FROM Strangers

クエリはエラーで失敗します:

MSG 104、レベル15、状態1、行3
ステートメントに組合オペレーターが含まれている場合、アイテムによる注文は、選択リストに表示する必要があります。

組合全員との声明で注文を使用するにはどうすればよいですか?

コピー患者の例

CREATE TABLE Friends (Flavor int, Color int)
CREATE TABLE Strangers (Flavor int, StrangerID int)
CREATE TABLE Rainbows (StrangerID int, Color int, Wavelength int)
go

SELECT Flavor, Color
FROM Friends

UNION ALL

SELECT Flavor,
    (SELECT TOP 1 Color
     FROM Rainbows
     WHERE Rainbows.StrangerID = Strangers.StrangerID
     ORDER BY Wavelength DESC
    ) AS Color
FROM Strangers
go

DROP TABLE Rainbows
DROP TABLE Strangers
DROP TABLE Friends

サーバー:MSG 104、レベル15、状態1、行2
ステートメントに組合オペレーターが含まれている場合、アイテムによる注文は、選択リストに表示する必要があります。

脚注

  • 1考慮された仮説的な例。か否か。

参照してください

役に立ちましたか?

解決

ちょっとしたハックですが、これはうまくいきます。

CREATE TABLE Friends (Flavor int, Color int)
CREATE TABLE Strangers (Flavor int, StrangerID int)
CREATE TABLE Rainbows (StrangerID int, Color int, Wavelength int)
go

SELECT Flavor, Color
FROM Friends

UNION ALL

SELECT Flavor,
    (SELECT Color FROM 
        (SELECT TOP 1 Color, Wavelength
         FROM Rainbows
         WHERE Rainbows.StrangerID = Strangers.StrangerID
         ORDER BY Wavelength DESC
         ) AS Foo
    ) AS Color
FROM Strangers
go

DROP TABLE Rainbows
DROP TABLE Strangers
DROP TABLE Friends

他のヒント

CTE(一般的なテーブル式)を使用できることを知っています。ここでは、CTEで注文を使用できます。

;with results as
(

    SELECT Cassettes.CassetteNumber,
    LastCassetteTransfers.Amount,
    CassetteTransfers.CreatedDate
    FROM Cassettes
    INNER JOIN LastCassetteTransfers
    ON Cassettes.CassetteGUID = LastCassetteTransfers.CassetteGUID

    UNION ALL

    SELECT Cassettes.CassetteNumber,
    (
       SELECT TOP 1 CassetteTransfers.Amount
       FROM CassetteTransfers
       WHERE CassetteTransfers.CassetteGUID = Cassettes.CassetteGUID
       AND CassetteTransfers.Mode = 'ctmLoad'
    ) AS Amount,
    CassetteTransfers.CreatedDate
    FROM Cassettes

)

SELECT CassetNumber, Amount
FROM results
ORDER BY CassetteTransfers.CreatedDate DESC, CassetteTransfers.Amount

それは助けになるはずです。重要なThigは、内部クエリ(この場合はCTE)で列ごとに返されるようにすることです。

それがどのように機能するか教えてください。

実際、私がコメントしたリンクからの回避策を見ると、これを試してみたいと思うかもしれません。

SELECT Flavor, Color
FROM Friends

UNION ALL

SELECT Flavor,
(SELECT TOP 1 Color FROM 
    (SELECT Color, Wavelength
    FROM Rainbows
    WHERE Rainbows.StrangerID = Strangers.StrangerID
) X ORDER BY Wavelength DESC) AS Color
FROM Strangers

...または、エンジンをだまして不平を言っていないような同様のタイプ。

しかし、私はそれをテストすることはできません、私は恐れています。建物に2000箱が残っているとは思わない。

編集:ああ!ジョーと私は私たちの卑劣さに重なり合っているように見えます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top