11

Tôi có câu hỏi này, nhưng nó không làm việc như mong muốn,nhận được "Không có cột nào được chỉ định cho cột 2 của 'd'" trong máy chủ sql cl?

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 

khi tôi chạy này, tôi nhận được

Msg 8155, Level 16, State 2, Line 1
Không có cột nào được chỉ định cho cột 2 của 'd'.

Bất kỳ ai có thể cho tôi biết tôi đang làm gì sai?

Ngoài ra, khi tôi chạy này,

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 

tôi nhận được

Msg 8155, Level 16, State 2, Line 1
Không có cột đã được chỉ định cho cột 1 của 'd '.
Msg 8155, Cấp 16, Tiểu bang 2, Dòng 1
Không có cột nào được chỉ định cho cột 2 của 'd'.

+0

bạn vẫn cần biết làm thế nào để có netBalance? – MimiEAM

Trả lời

11

[sửa]

tôi cố gắng viết lại truy vấn của bạn, nhưng thậm chí bạn sẽ làm việc khi bạn bí danh sư để các cột tổng hợp trong truy vấn định nghĩa 'd'.


Tôi nghĩ rằng bạn đang tìm kiếm như sau:

Đầu tiên một:

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 

Second một:

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 
+0

Không! điều này không hoạt động, cho lần đầu tiên, nó hiển thị 'Msg 8155, Cấp 16, Tiểu bang 2, Dòng 1 Không có cột nào được chỉ định cho cột 2 của 'd'. Msg 207, Cấp 16, Tiểu bang 1, Dòng 4 Tên cột không hợp lệ 'bkdqty'.' cho tên thứ hai hiển thị 'Msg 8155, Cấp 16, Tiểu bang 2, Dòng 1 Không có cột nào được chỉ định cho cột 1 của' d '. Msg 8155, Cấp 16, Tiểu bang 2, Dòng 1 Không có cột nào được chỉ định cho cột 2 của 'd'. Msg 207, Cấp 16, Tiểu bang 1, Dòng 23 Tên cột không hợp lệ 'thời lượng'. Msg 207, Cấp 16, Tiểu bang 1, Dòng 4 Tên cột không hợp lệ 'bkdqty'. ' – Razort4x

+4

Lỗi là không đặt tên cho các cột tổng hợp trong truy vấn xác định 'd' ở cả hai vị trí. Tôi đã cố sửa nó, bạn có thể xác minh không? – Vikdor

+2

f * ck yeah man! Nó đã làm việc! cảm ơn rất nhiều! :-) bạn là một vị cứu tinh cuộc sống. Một điều mặc dù nó sẽ là 'tháng (clothdeliverydate) 'duration'' để nó hoạt động, nếu không nó vẫn nói rằng không thể tìm thấy thời lượng cột. – Razort4x

15

Bạn chỉ cần cung cấp một bí danh cho tổng thể của bạn các cột trong CTE

d as (SELECT 
    duration, 
    sum(totalitems) as sumtotalitems 
FROM 
    [DrySoftBranch].[dbo].[mnthItemWiseTotalQty] ('1') AS BkdQty 
group by duration 
) 
3

Bởi vì bạn đang creatin một biểu bảng, bạn phải xác định cấu trúc của bảng, bạn có thể đạt được điều này trên hai cách:

1: Trong chọn bạn có thể sử dụng COLUMNNAMES gốc (như trong lần đầu tiên của bạn ví dụ), nhưng với tập hợp, bạn phải sử dụng bí danh (cũng có tên xung đột). Giống như

sum(totalitems) as bkdqty 

2: Bạn cần phải xác định tên cột rigth sau tên của talbe, và sau đó bạn chỉ cần chăm sóc mà đếm trong những cái tên nên mach số lượng coulms đã được lựa chọn trong truy vấn . Giống như:

d (duration, bkdqty) 
AS (Select....) 

Với giải pháp thứ hai, cả truy vấn của bạn sẽ hoạt động!

2

Khá một thông báo lỗi trực quan - chỉ cần cung cấp cho các cột trong tên d

Thay đổi hoặc là này

d as 
(
    select     
    [duration] = month(clothdeliverydate),     
    [bkdqty] = SUM(CONVERT(INT, deliveredqty))    
    FROM     
    barcodetable    
    where     
    month(clothdeliverydate) is not null     
    group by month(clothdeliverydate)   
) 

Hoặc bạn có thể tuyên bố một cách rõ ràng các lĩnh vực trong định nghĩa của CTE:

d ([duration], [bkdqty]) as 
(
    select     
    month(clothdeliverydate),     
    SUM(CONVERT(INT, deliveredqty))    
    FROM     
    barcodetable    
    where     
    month(clothdeliverydate) is not null     
    group by month(clothdeliverydate)   
) 
1

Chỉ cần thêm tên bí danh như sau
tổng (tổng cộng) làm tổng cộng.

0

rõ ràng, như đã nêu trong phản hồi của trình phân tích cú pháp, tên cột là cần thiết cho cả hai trường hợp. Trong cả hai phiên bản, các cột của "d" không được đặt tên.

trong trường hợp 1: cột 2 của bạn là sum(totalitems) không được đặt tên. duration sẽ giữ lại tên "duration"

trong trường hợp 2: cả month(clothdeliverydate)SUM(CONVERT(INT, deliveredqty)) phải được đặt tên

3

Tôi đã có một truy vấn tương tự và một vấn đề tương tự.

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 

tôi thấy rằng SQL Server được nghẹt thở trên cột COUNT(*), và đã đem lại cho tôi những lỗi Không có cột đã được chỉ định cho cột 2.

Đặt bí danh trên cột COUNT(*) đã khắc phục sự cố.

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 
Các vấn đề liên quan