0

データベースでこの問題が発生しています。私のコードは次のとおりです。

 CREATE PROCEDURE [dbo].[test1]
    @den nchar(14) = ''         
 AS
 BEGIN  
   SET NOCOUNT ON;

   DECLARE @SQL AS varchar(3000) = ''   
   DECLARE @WHERE1 AS varchar(1000) = ''    
   DECLARE @ORDERBY1 AS varchar(1000) = ''

   SET @WHERE1 = @WHERE1 + ' WHERE [dbo].table2.sag=1 '

   IF (@den != '')      
      SET @WHERE1 = @WHERE1 + ' AND RIGHT(''0000000000''+CONVERT(VARCHAR(10),[dbo].table1_den_id1),10) +RIGHT(''0000''+CONVERT(VARCHAR(4),[dbo].table1_den_id2),4) = ''' + RIGHT('00000000000000'+RTRIM(@den),14) + ''''

   SET @ORDERBY1 = @ORDERBY1 + 'GROUP BY [dbo].table2.item_barcord      
ORDER BY LEFT([dbo].table2.item_barcord,13) ASC'

   SET @SQL = @SQL + '      
          SELECT            
          DISTINCT          
          ''JAN'' + LEFT([dbo].table2.item_barcord,13) AS ''code'',             
          LEFT(MIN([dbo].table2.item_name),15) AS ''name''      
          FROM [dbo].table1         
          INNER JOIN [dbo].table2 ON [dbo].table1.id = [dbo].table2.id          '           + @WHERE1       
          + @ORDERBY1

   DECLARE @RET AS numeric(3,0) = 0

   EXEC(@SQL)   
   SET @RET = @@ROWCOUNT

   RETURN @RET
END

ただし、次のエラーが発生します。

SELECT DISTINCTが指定されている場合は、ORDERBY項目が選択リストに表示される必要があります。

私を助けてください。

4

2 に答える 2

1

この行を変更してみてください:

SET @ORDERBY1 = @ORDERBY1 + 'GROUP BY [dbo].table2.item_barcord     
ORDER BY LEFT([dbo].table2.item_barcord,13) ASC'

に :

SET @ORDERBY1 = @ORDERBY1 + 'GROUP BY [dbo].table2.item_barcord     
ORDER BY LEFT([dbo].table2.item_barcord,13), 2 ASC'

詳細: SELECT DISTINCT と ORDER BY

于 2013-03-05T03:08:49.310 に答える
1

必要がないようにクエリを変更する必要があると思いますselect distinct

      SELECT ''JAN'' + LEFT([dbo].table2.item_barcord,13) AS ''code'',  
      . . . 
      group by LEFT([dbo].table2.item_barcord,13)

その後、order by正しく機能します。追加のボーナスとして、クエリはより理にかなっていますselect distinct。集計では、把握するのが少し難しいです。

于 2013-03-05T03:11:28.093 に答える