11

que tienen esta consulta, pero no su trabajo como debe ser,obteniendo "No se especificó ninguna columna para la columna 2 de 'd'" en el servidor sql cte?

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 

cuando corro esto, me estoy haciendo

Msg 8155, nivel 16, estado 2, línea 1
No se especificó ninguna columna para la columna 2 de 'd'.

¿Alguien puede decirme qué estoy haciendo mal?

Además, cuando corro esto,

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 

consigo

Msg 8155, nivel 16, estado 2, línea 1
No columna se ha especificado para la columna 1 de la 'd '.
Msg 8155, nivel 16, estado 2, línea 1
No se ha especificado ninguna columna para la columna 2 de 'd'.

+0

¿Todavía tiene que saber cómo tener el netBalance? – MimiEAM

Respuesta

11

[editar]

Traté de volver a escribir la consulta, pero incluso los suyos a trabajar una vez que los alias asociados a las columnas de agregado en la consulta que define 'd'.


creo que busca el siguiente:

primera:

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 

segunda:

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

¡No! esto no está funcionando, para el primero, mostró 'Msg 8155, nivel 16, estado 2, línea 1 No se especificó ninguna columna para la columna 2 de 'd'. Msg 207, nivel 16, estado 1, línea 4 nombre de la columna no válida 'bkdqty'.' para la segunda uno que mostró 'Msg 8155, nivel 16, estado 2, línea 1 No se columna se ha especificado para la columna 1 de la' re'. Msg 8155, nivel 16, estado 2, línea 1 No se especificó ninguna columna para la columna 2 de 'd'. Msg 207, nivel 16, estado 1, línea 23 Nombre de columna inválido 'duration'. Msg 207, nivel 16, estado 1, línea 4 Nombre de la columna no válida 'bkdqty'. ' – Razort4x

+4

El error consiste en no nombrar las columnas agregadas en la consulta que define 'd' en ambos lugares. Traté de corregirlo, ¿puedes verificarlo? – Vikdor

+2

f * ck sí hombre! ¡Funcionó! ¡muchas gracias! :-) eres un salvador de vida. Una cosa sería 'month (clothdeliverydate) 'duration'' para que funcione, de lo contrario, sigue diciendo que no puede encontrar la duración de la columna. – Razort4x

15

sólo tiene que proporcionar un alias para el agregado columnas en el CTE

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

Debido a que está Creatina una expresión de tabla, tiene que especificar la estructura de esa tabla, puede achive esto en dos sentidos:

1: En el selecto puede utilizar las columnnames originales (como en su primera ejemplo), pero con los agregados debe usar un alias (también en nombres conflictivos). Al igual que

sum(totalitems) as bkdqty 

2: Es necesario especificar los nombres de las columnas rigth después del nombre de la talbe, y luego sólo hay que tener cuidado de que la cuenta de los nombres debe mach el número de coulms fue seleccionado en la consulta . Me gusta:

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

¡Con la segunda solución, su consulta funcionará!

2

Todo un mensaje de error intuitiva - sólo tiene que dar a las columnas en los nombres d

cambio ni a la presente

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

O puede declarar explícitamente los campos en la definición del 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

Simplemente agregue un nombre de alias como sigue
sum (totalitems) como totalitems.

0

Evidentemente, como se indica en la respuesta del analizador, se necesita un nombre de columna para ambos casos. En cualquiera de las versiones, las columnas de "d" no tienen nombre.

en el caso 1: su columna 2 de d es sum(totalitems) que no tiene nombre. duration mantendrá el nombre de "duración"

en el caso 2: tanto month(clothdeliverydate) y SUM(CONVERT(INT, deliveredqty)) tienen que ser nombrado

3

que tenía una consulta similar y un problema similar.

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 

me encontré con que SQL Server se estaba ahogando en la columna de la COUNT(*), y me estaba dando el error No columna se ha especificado para la columna 2.

Poner un alias en la columna COUNT(*) solucionó el problema.

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 
Cuestiones relacionadas