このクエリはありますが、正常に機能していません。
with c as (select
month(bookingdate) as duration,
count(*) as totalbookings
from
entbookings
group by month(bookingdate)
),
d as (SELECT
duration,
sum(totalitems)
FROM
[DrySoftBranch].[dbo].[mnthItemWiseTotalQty] ('1') AS BkdQty
group by duration
)
select
c.duration,
c.totalbookings,
d.bkdqty
from
c
inner join d
on c.duration = d.duration
これを実行すると、
メッセージ8155、レベル16、状態2、行1
「d」の列2に列が指定されていません。
誰が私が間違っているのか教えてもらえますか?
また、これを実行すると、
with c as (select
month(bookingdate) as duration,
count(*) as totalbookings
from
entbookings
group by month(bookingdate)
),
d as (select
month(clothdeliverydate),
SUM(CONVERT(INT, deliveredqty))
FROM
barcodetable
where
month(clothdeliverydate) is not null
group by month(clothdeliverydate)
)
select
c.duration,
c.totalbookings,
d.bkdqty
from
c
inner join d
on c.duration = d.duration
私は得る
メッセージ8155、レベル16、状態2、行1
「d」の列1に列が指定されていません。
メッセージ8155、レベル16、状態2、行1
「d」の列2に列が指定されていません。
[編集]
クエリを書き直そうとしましたが、「d」を定義するクエリの集計列にエイリアスを関連付けると、あなたのクエリでも動作します。
次のものを探していると思います:
最初の1つ:
select
c.duration,
c.totalbookings,
d.bkdqty
from
(select
month(bookingdate) as duration,
count(*) as totalbookings
from
entbookings
group by month(bookingdate)
) AS c
inner join
(SELECT
duration,
sum(totalitems) 'bkdqty'
FROM
[DrySoftBranch].[dbo].[mnthItemWiseTotalQty] ('1') AS BkdQty
group by duration
) AS d
on c.duration = d.duration
二つ目:
select
c.duration,
c.totalbookings,
d.bkdqty
from
(select
month(bookingdate) as duration,
count(*) as totalbookings
from
entbookings
group by month(bookingdate)
) AS c
inner join
(select
month(clothdeliverydate) 'clothdeliverydatemonth',
SUM(CONVERT(INT, deliveredqty)) 'bkdqty'
FROM
barcodetable
where
month(clothdeliverydate) is not null
group by month(clothdeliverydate)
) AS d
on c.duration = d.duration
CTEの集計列のエイリアスを提供する必要があります
d as (SELECT
duration,
sum(totalitems) as sumtotalitems
FROM
[DrySoftBranch].[dbo].[mnthItemWiseTotalQty] ('1') AS BkdQty
group by duration
)
同様のクエリと同様の問題がありました。
_SELECT
*
FROM
Users ru
LEFT OUTER JOIN
(
SELECT ru1.UserID, COUNT(*)
FROM Referral r
LEFT OUTER JOIN Users ru1 ON r.ReferredUserId = ru1.UserID
GROUP BY ru1.UserID
) ReferralTotalCount ON ru.UserID = ReferralTotalCount.UserID
_
SQL ServerがCOUNT(*)
列で詰まっていて、エラーが発生していることがわかりました列2に列が指定されていません。
COUNT(*)
列にエイリアスを追加すると、問題が修正されました。
_ SELECT
*
FROM
Users ru
LEFT OUTER JOIN
(
SELECT ru1.UserID, COUNT(*) AS -->MyCount<--
FROM Referral r
LEFT OUTER JOIN Users ru1 ON r.ReferredUserId = ru1.UserID
GROUP BY ru1.UserID
) ReferralTotalCount ON ru.UserID = ReferralTotalCount.UserID
_
次のようにエイリアス名を追加するだけです
sum(totalitems)をtotalitemsとして。
テーブル式を作成しているため、そのテーブルの構造を指定する必要があります。これは次の2つの方法で実現できます。
1:選択では、元の列名を使用できます(最初の例のように)が、集約ではエイリアスを使用する必要があります(名前の競合もあります)。いいね
sum(totalitems) as bkdqty
2:タルブの名前の後に列名を指定する必要があります。その後、名前の数がクエリで選択された列の数と一致するように注意する必要があります。のような:
d (duration, bkdqty)
AS (Select.... )
2番目のソリューションでは、両方のクエリが機能します!
非常に直感的なエラーメッセージ-d名の列を指定するだけです
これに変更する
d as
(
select
[duration] = month(clothdeliverydate),
[bkdqty] = SUM(CONVERT(INT, deliveredqty))
FROM
barcodetable
where
month(clothdeliverydate) is not null
group by month(clothdeliverydate)
)
または、cteの定義でフィールドを明示的に宣言できます。
d ([duration], [bkdqty]) as
(
select
month(clothdeliverydate),
SUM(CONVERT(INT, deliveredqty))
FROM
barcodetable
where
month(clothdeliverydate) is not null
group by month(clothdeliverydate)
)
明らかに、パーサーの応答で述べられているように、両方の場合に列名が必要です。どちらのバージョンでも、「d」の列には名前が付けられていません。
ケース1の場合:dの列2はsum(totalitems)
で、名前は付けられていません。 duration
は「duration」という名前を保持します
ケース2:month(clothdeliverydate)
とSUM(CONVERT(INT, deliveredqty))
の両方に名前を付ける必要があります