  | 
              
	              
	                
  
    |   | 
   
  
    
        
        ช่วยดู Query ข้อมูลหน่อยค่า งมมาเป็นอาทิตย์แล้วยังไม่ได้เลย     | 
   
  
    |   | 
   
 
 
 
              
  
          
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 Query บนนี้คุ้นๆ นะครับ ผมแนะนำให้คับ ลองไปศึกษา PIVOT TABLE ดูครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-22 13:48:09 | 
                        By :
                            OOP | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ตาราง report ในรูป เป็นผลลัพท์ที่ทำได้ หรือเป็นผลลัพท์ที่ต้องการหรอครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-22 15:34:54 | 
                        By :
                            nPointXer | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 Code (SQL) 
DECLARE @minDate DATETIME = ( SELECT MIN( reciept_date ) FROM dbo.tb2); 
DECLARE @newLine CHAR(2) = CHAR(13)+CHAR(10);
DECLARE @sqlSelect NVARCHAR(max) = 
'SELECT
	CASE WHEN( ROW_NUMBER() OVER ( PARTITION BY p_no ORDER BY p_no )) = 1 THEN p_no ELSE '''' end p_no  
	, p_price 
	, convert( varchar , t2.reciept_time , 8 ) reciept_time ' ;
DECLARE @sqlWhere NVARCHAR(max) = 'FROM dbo.tb1
CROSS APPLY(
	SELECT id, reciept_time  FROM dbo.tb2 WHERE p_no_id = dbo.tb1.id
) t2'
DECLARE @cnt INT = 0;
DECLARE @strCnt VARCHAR(10) = '';
DECLARE @strMinDate VARCHAR(20) = '';
WHILE @cnt < 7
BEGIN	
	SET @strCnt = CAST(@cnt AS VARCHAR(10));
	SET @strMinDate = convert(varchar, DATEADD(DAY , @cnt , @minDate), 1) 
	set @sqlSelect += @newLine +' , isnull( day'+ @strCnt+ '.amont ,0) [' + @strMinDate+ '] ' ;
	
	SET @sqlWhere += @newLine
	+ 'outer APPLY (
		SELECT amont FROM dbo.tb2 WHERE id = t2.id AND reciept_time = t2.reciept_time 
		AND reciept_date = ''' +  @strMinDate + ''' 
	) day' + @strCnt;
   SET @cnt +=  1;
END;
DECLARE @sqlAll NVARCHAR(MAX) =  @sqlSelect + @newLine + @sqlWhere;
--PRINT @sqlAll;
EXECUTE sp_executesql @sqlAll;
                         
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-29 15:54:02 | 
                        By :
                            SandKing | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 มันคือการทำ dynamic sql ครับ หลักการคือเอา string sql มาต่อกัน แล้ว run ด้วยคำสั่ง EXECUTE sp_executesql ครับ ^_^ 
https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-29 17:55:31 | 
                        By :
                            SandKing | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                   ตอบความคิดเห็นที่ : 11 เขียนโดย : SandKing เมื่อวันที่ 2018-01-29 17:55:31 
รายละเอียดของการตอบ ::
  กะว่าจะเอาไปศึกษาเองอีกนิดหน่อยแต่ก็ยังงงอยู่ดีอ่ะค่ะ ยังไงรบกวนช่วยดูให้อีกทีนะคะ ขอบคุณมากค่ะ
 Code (SQL)
DECLARE @minDate DATETIME = ( SELECT MIN( reciept_date ) FROM dbo.tb2); 
DECLARE @newLine CHAR(2) = CHAR(13)+CHAR(10);
DECLARE @sqlSelect NVARCHAR(max) = 
'SELECT
	CASE WHEN( ROW_NUMBER() OVER ( PARTITION BY p_no ORDER BY p_no )) = 1 THEN p_no ELSE '''' end p_no  
	, p_price 
	, convert( varchar , t2.reciept_time , 8 ) reciept_time ' ;
DECLARE @sqlWhere NVARCHAR(max) = 'FROM dbo.tb1
CROSS APPLY(
	SELECT id, reciept_time  FROM dbo.tb2 WHERE p_no_id = dbo.tb1.id
) t2'
DECLARE @cnt INT = 0;
DECLARE @strCnt VARCHAR(10) = '';
DECLARE @strMinDate VARCHAR(20) = '';
WHILE @cnt < 7 --จำนวนวัน
BEGIN	
	SET @strCnt = CAST(@cnt AS VARCHAR(10));
	SET @strMinDate = convert(varchar, DATEADD(DAY , @cnt , @minDate), 1) 
	set @sqlSelect += @newLine +' , isnull( day'+ @strCnt+ '.amont ,0) [' + @strMinDate+ '] ' ;
	
	SET @sqlWhere += @newLine
	+ 'outer APPLY (
		SELECT ForecastCumQty FROM dbo.MasterData WHERE id = t2.id AND ForecastTime = t2.ForecastTime 
		AND ForecastDate = ''' +  @strMinDate + ''' 
	) day' + @strCnt;
   SET @cnt +=  1;
END;
DECLARE @sqlAll NVARCHAR(MAX) =  @sqlSelect + @newLine + @sqlWhere;
--PRINT @sqlAll;
EXECUTE sp_executesql @sqlAll;
 
Database :: https://drive.google.com/open?id=1bivhPWUEO7hO-wmudrPu5H55kpPBwUFD
 
อยากได้ผลลัพธ์ประมาณนี้อ่ะค่ะ
  
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 10:34:04 | 
                        By :
                            NickyPrime | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 สงสัยเป็นคนละ version กัน งั้นขอเป็น Generate Scripts ก็ได้ครับ 
 
คลิ๊กขวาที่ Database > Tasks > Generate Scripts.. 
หัวข้อ Introduction กด Next ไปครับ 
หัวข้อ Choose Objects ก็เลือก Table ที่เราจะเอาให้ซึ่งก็คือ Shipping และ MaserData กด Next ไป 
จะถึงหัวข้อนี้สำคัญ Set Scripting Options กด Advanced  
หัวข้อ Script for Server Version เลือกเป็น SQL Server 2008 R2 
หัวข้อ Types of data to script เลือกเป็น Schema and data 
ละก็เลือกพื้นที่ save ไฟล์ครับ 
 
https://stackoverflow.com/questions/26103477/downgrade-database-from-sql-server-2012-to-2008 
 
เดี๋ยวขออนุญาตเอา Script คุณ Programmer Of Persia ไปปรับใช้ดูครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 11:24:25 | 
                        By :
                            nPointXer | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ใช้ PIVOT TABLE น่าจะง่ายสุดละครับ 
 
 
Code (SQL) 
WITH Report AS 
(
  SELECT ROW_NUMBER() OVER (ORDER BY PartNum) ROW_NUM,PartNum,ForcastDate ,ForcastTime,Material,DV,Plant,ForcastCumQty
  FROM Shipping 
  INNER JOIN MasterData ON Shipping.ID=MasterData.ID
)
SELECT * FROM
(
  SELECT (CASE WHEN PartNum=(SELECT PartNum FROM Report TBLSUB WHERE TBLSUB.ROW_NUM+1=Report.ROW_NUM ) THEN ' ' ELSE PartNum END)PartNum,
    ForcastDate,
    ForcastTime,
    Material,
    DV,
    Plant,
    ForcastCumQty,
    ROW_NUM
  FROM Report
  ORDER BY PartNum
)
PIVOT 
(
   SUM(ForcastCumQty)
   FOR ForcastDate IN ('20180109','20180110','20180111','2018012')
)
ORDER BY ROW_NUM
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 11:35:34 | 
                        By :
                            OOP | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                   ตอบความคิดเห็นที่ : 13 เขียนโดย : nPointXer เมื่อวันที่ 2018-01-30 11:24:25 
รายละเอียดของการตอบ ::
  
ได้แบบนี้อ่ะจ้า
 Code (SQL)
USE [test_sql2]
GO
/****** Object:  Table [dbo].[MasterData]    Script Date: 30/01/2018 13:01:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MasterData](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[DV] [nchar](10) NULL,
	[Plant] [nchar](10) NULL,
	[Material] [nchar](10) NULL,
	[CustomerMaterialNumber] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Shipping]    Script Date: 30/01/2018 13:01:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Shipping](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[PartNum] [varchar](50) NULL,
	[ForecastNetQTY] [varchar](50) NULL,
	[ForecastCumQty] [varchar](50) NULL,
	[ForecastDate] [varchar](50) NULL,
	[ForecastTime] [nchar](10) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[MasterData] ON 
INSERT [dbo].[MasterData] ([id], [DV], [Plant], [Material], [CustomerMaterialNumber]) VALUES (1, N'10        ', N'101       ', N'112235    ', N'AB31 19E673 AA')
INSERT [dbo].[MasterData] ([id], [DV], [Plant], [Material], [CustomerMaterialNumber]) VALUES (2, N'10        ', N'101       ', N'11524     ', N'AB39 17775 AD')
INSERT [dbo].[MasterData] ([id], [DV], [Plant], [Material], [CustomerMaterialNumber]) VALUES (3, N'10        ', N'103       ', N'2511125   ', N'AB39 17775 BD527B')
INSERT [dbo].[MasterData] ([id], [DV], [Plant], [Material], [CustomerMaterialNumber]) VALUES (4, N'10        ', N'105       ', N'252125    ', N'AB39 17775 BD534E')
INSERT [dbo].[MasterData] ([id], [DV], [Plant], [Material], [CustomerMaterialNumber]) VALUES (5, N'10        ', N'102       ', N'512215    ', N'AB39 17775 BDCDBB')
SET IDENTITY_INSERT [dbo].[MasterData] OFF
SET IDENTITY_INSERT [dbo].[Shipping] ON 
INSERT [dbo].[Shipping] ([id], [PartNum], [ForecastNetQTY], [ForecastCumQty], [ForecastDate], [ForecastTime]) VALUES (1, N'AB31 19E673 AA', N'150', N'20', N'20180109', N'8:00      ')
INSERT [dbo].[Shipping] ([id], [PartNum], [ForecastNetQTY], [ForecastCumQty], [ForecastDate], [ForecastTime]) VALUES (2, N'AB31 19E673 AA', N'430', N'35', N'20180109', N'12:45     ')
INSERT [dbo].[Shipping] ([id], [PartNum], [ForecastNetQTY], [ForecastCumQty], [ForecastDate], [ForecastTime]) VALUES (3, N'AB39 17775 AD', N'20', N'10', N'20180110', N'8:00      ')
INSERT [dbo].[Shipping] ([id], [PartNum], [ForecastNetQTY], [ForecastCumQty], [ForecastDate], [ForecastTime]) VALUES (4, N'AB39 17775 BD527B', N'30', N'25', N'20180110', N'12:45     ')
INSERT [dbo].[Shipping] ([id], [PartNum], [ForecastNetQTY], [ForecastCumQty], [ForecastDate], [ForecastTime]) VALUES (5, N'AB39 17775 BD527B', N'45', N'35', N'20180111', N'8:00      ')
SET IDENTITY_INSERT [dbo].[Shipping] OFF
 
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 13:03:52 | 
                        By :
                            NickyPrime | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ผมทำใน Oracle ครับ ต้องเอาไปดัดแปลงเอง ถ้ามันมีวันที่เปลี่ยนไปเรือยๆ แนะนำให้ใส่ DECLARE ใส่ตัวแปรครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 13:30:01 | 
                        By :
                            OOP | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ทำเป็นแบบนี้ดู [20180109] ไม่ต้องมีเขา                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 14:05:34 | 
                        By :
                            OOP | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                   ตอบความคิดเห็นที่ : 19 เขียนโดย : OOP เมื่อวันที่ 2018-01-30 14:05:34 
รายละเอียดของการตอบ ::
  ค่าเวลาที่ออกมาซ้ำกันนะค่ะ
 Code (SQL)
WITH Report AS 
(
  SELECT ROW_NUMBER() OVER (ORDER BY PartNum) ROW_NUM,PartNum ,ForecastDate ,ForecastTime,Material,DV,Plant,ForecastCumQty
  FROM Shipping 
  INNER JOIN MasterData ON Shipping.PartNum=MasterData.CustomerMaterialNumber
)
SELECT * FROM
(
  SELECT (CASE WHEN PartNum=(SELECT PartNum FROM Report TBLSUB WHERE TBLSUB.ROW_NUM+1=Report.ROW_NUM ) THEN ' ' ELSE PartNum END)
    
	PartNum,
    ForecastDate,
    ForecastTime,
    Material,
    DV,
    Plant,
    ForecastCumQty,ROW_NUM
  FROM Report
)a
PIVOT 
(
   SUM(ForecastCumQty)
   FOR ForecastDate IN  ([20180109],[20180110],[20180111]) 
)
as p
order by ROW_NUM
 
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 14:43:12 | 
                        By :
                            NickyPrime | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ลองปรับแก้เองดูคับ เพราะผมทำให้เป็นแนวทางครับ ถ้าทำให้หมดทุกอย่าง เดวต้องมาถามตลอด                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 14:55:47 | 
                        By :
                            OOP | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ให้ตายเหอะ ForecastCumQty เก็บเป็น varchar ต้อง convert เป็น int ก่อนไม่งั้นไม่ออก หรือจะใส่อีกแบบก็ได้ MAX(...) แต่ถ้ามีข้อมูลที่ต้องรวม ก็ต้องใช้ SUM(...) อยู่ดี 
  
Code (MSSQL) แบบ SUM(...) 
DECLARE @Query AS NVARCHAR (MAX) 
,@ColumnName AS NVARCHAR (MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME(ForecastDate)
FROM 
	(
		SELECT DISTINCT ForecastDate
		FROM dbo.Shipping
	) AS ForecastDate
ORDER BY ForecastDate
SET @Query = N'
SELECT DISTINCT
	PartNum,
	Material,
	DV,
	Plant,
	ForecastNetQTY,
	ForecastTime,
	' + @ColumnName + '
FROM (
	SELECT a.PartNum
	, b.Material
	, b.DV
	, b.Plant
	, a.ForecastNetQTY
	, a.ForecastTime
	, a.ForecastDate
	, CAST(a.ForecastCumQty AS INT) AS ForecastCumQty
	FROM [dbo].[Shipping] a
	LEFT JOIN [dbo].[MasterData] b ON (a.PartNum=b.CustomerMaterialNumber)
) AS j PIVOT (
	SUM(ForecastCumQty) FOR ForecastDate IN (' + @ColumnName + ')
) AS ForecastDate'
EXEC sp_executesql @Query
 
 
 
Code (MSSQL) แบบ MAX(...) 
DECLARE @Query AS NVARCHAR (MAX) 
,@ColumnName AS NVARCHAR (MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME(ForecastDate)
FROM 
	(
		SELECT DISTINCT ForecastDate
		FROM dbo.Shipping
	) AS ForecastDate
ORDER BY ForecastDate
SET @Query = N'
SELECT DISTINCT
	PartNum,
	Material,
	DV,
	Plant,
	ForecastNetQTY,
	ForecastTime,
	' + @ColumnName + '
FROM (
	SELECT a.PartNum
	, b.Material
	, b.DV
	, b.Plant
	, a.ForecastNetQTY
	, a.ForecastTime
	, a.ForecastDate
	, a.ForecastCumQty
	FROM [dbo].[Shipping] a
	LEFT JOIN [dbo].[MasterData] b ON (a.PartNum=b.CustomerMaterialNumber)
) AS j PIVOT (
	MAX(ForecastCumQty) FOR ForecastDate IN (' + @ColumnName + ')
) AS ForecastDate'
EXEC sp_executesql @Query
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 16:41:56 | 
                        By :
                            nPointXer | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 Code (SQL) 
select p_no, p_price, reciept_time
, if(ds7=0, '', ds7) as d7
, if(ds6=0, '', ds6) as d6
, if(ds5=0, '', ds5) as d5
, if(ds4=0, '', ds4) as d4
, if(ds3=0, '', ds3) as d3
, if(ds2=0, '', ds2) as d2
, if(ds1=0, '', ds1) as d1
from (
	select p_no_id, reciept_time
	, sum(if(reciept_date=date_sub('2018-01-27', interval 6 day), amount, 0)) as ds7
	, sum(if(reciept_date=date_sub('2018-01-27', interval 5 day), amount, 0)) as ds6
	, sum(if(reciept_date=date_sub('2018-01-27', interval 4 day), amount, 0)) as ds5
	, sum(if(reciept_date=date_sub('2018-01-27', interval 3 day), amount, 0)) as ds4
	, sum(if(reciept_date=date_sub('2018-01-27', interval 2 day), amount, 0)) as ds3
	, sum(if(reciept_date=date_sub('2018-01-27', interval 1 day), amount, 0)) as ds2
	, sum(if(reciept_date='2018-01-27', amount, 0)) as ds1
	from tb2 where reciept_date>date_sub('2018-01-27', interval 7 day)
	group by p_no_id, reciept_time
	) as tmp
left join tb1 on tb1.id = tmp.p_no_id
order by p_no, reciept_time
 
  
ข้างบน เป็นตัวอย่าง จาก mysql เป็นการคิวรี่ จากคำสั่งพื้นฐาน ลองศึกษาให้เข้า่ใจดูก่อน 
 
แล้วเปลี่ยนคำสั่งให้เป็น sqlserver 
Code (SQL) 
### จาก
, if(ds7=0, '', ds7) as d7
, sum(if(reciept_date=date_sub('2018-01-27', interval 6 day), amount, 0)) as ds7
### เป็น
, case ds7 when 0 then '' else ds7 end as d7
, sum(case reciept_date when dateadd(day, -6, date('2018-01-27')) then amount else 0 end) as ds7
                        
               
               | 
             
            
              
			                
  ประวัติการแก้ไข 2018-01-30 20:29:11              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-30 20:28:01 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 อันนี้แบบแสดง 7 วันครับ จากวันที่แรกของข้อมูล ไม่รู้ว่าใช่ที่ต้องการหรือเปล่าครับ อาจจะมีวิธีที่ดีและง่ายกว่านี้ก็แก้ๆตรง SELECT @ColumnName = ISNULL แถวๆนั้นแหละครับ ลองดูเนาะ 
 
Code (MSSQL) 
DECLARE @Query AS NVARCHAR (MAX) 
,@ColumnName AS NVARCHAR (MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME(ForecastDate)
FROM 
	(
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 0,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 1,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 2,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 3,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 4,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 5,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
		union all
		SELECT TOP 1 CONVERT(char(10), DATEADD(day, 6,cast(ForecastDate AS date)),112) AS ForecastDate
		FROM dbo.Shipping
	) AS ForecastDate
ORDER BY ForecastDate
SET @Query = N'
SELECT DISTINCT
	PartNum,
	Material,
	DV,
	Plant,
	ForecastNetQTY,
	ForecastTime,
	' + @ColumnName + '
FROM (
	SELECT a.PartNum
	, b.Material
	, b.DV
	, b.Plant
	, a.ForecastNetQTY
	, a.ForecastTime
	, a.ForecastDate
	, CAST(a.ForecastCumQty AS INT) AS ForecastCumQty
	FROM [dbo].[Shipping] a
	LEFT JOIN [dbo].[MasterData] b ON (a.PartNum=b.CustomerMaterialNumber)
) AS j PIVOT (
	SUM(ForecastCumQty) FOR ForecastDate IN (' + @ColumnName + ')
) AS ForecastDate'
EXEC sp_executesql @Query
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-01-31 10:56:41 | 
                        By :
                            nPointXer | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ผมเข้าใจทุกฯคำถามและทุกฯคำตอบ 
--- +55555 
 
เห็นเด็กฯ สมัยนี้คุยกัน อ่านแล้วมันก็สนุกดี                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-02-04 20:27:08 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ถ้าอยากง่ายนะครับ ให้ทำ pivot ที่รายงาน 
ไม่ใช่การทำ pivot ตอน query 
 
รายงานที่ว่าคือ ssrs, crystal report 
 
เคสนี้อย่าไปยึดติดว่าต้องสมบูรณ์แบบตั้งแตกแรก เราใช้ทูลช่วยบ้างก็ไม่เป็นไรหรอก 
แต่ถ้าอยากทำให้เสร็จในคิวรี่เยก็มีวิธีอยู่ 
 
https://gist.github.com/smoothdeveloper/6898062 
https://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-02-09 15:14:50 | 
                        By :
                            deksoke | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                  
Query เด็กฯพวกนี้ผมเคยเขียนมาตั้งแต่ยี่สิบปีที่แล้ว 
(อาจจะไม่ได้อยู่ในรูปแบบนี้) 
 
 
@Furikuri ขอบคุณนะสำหรับสิ่งที่ผมคิด "อย่างน้อยฯผมก็ยังคิดว่ายังมีคุณเป็นเพื่อน" 
 
 
ทุกฯคำถาม/คำตอบ ผมไม่สนใจคำตอบแม้แต่นิดเดียว 
มันไม่ทำให้ผมจนขึ้น หรือว่า รวยลง แม้แต่นิดเดียว 
 
 
 
ผมฝากข้อความเตือนสติคุณเอาไว้ว่า "อะไรก็ตามที่คนอื่นเขาไม่ทำ แต่เราทำเป็นคนแรก" 
ขอให้โชคดีครับและอย่าประมาทกับชีวิต 
 
ด้วยความปราถนาดี 
หน้าฮี                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-02-11 14:26:27 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
      		  
	
     | 
   
 
                 |