Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > ช่วยดู Query ข้อมูลหน่อยค่า งมมาเป็นอาทิตย์แล้วยังไม่ได้เลย



 

ช่วยดู Query ข้อมูลหน่อยค่า งมมาเป็นอาทิตย์แล้วยังไม่ได้เลย

 



Topic : 130035



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์




p


ทำได้แค่นี้เองอ่ะจ้า
Code (SQL)
WITH tbl AS 
(
  SELECT ROW_NUMBER() OVER (ORDER BY P_NO) ROW_NUM,P_NO,RECIEPT_TIME ,reciept_date,RECIEPT_TIME,P_PRICE
  FROM tb1 
  INNER JOIN tb2 ON tb1.ID=tb2.P_NO_ID
)

SELECT (CASE WHEN P_NO=(SELECT P_NO FROM TBL TBLSUB WHERE TBLSUB.ROW_NUM+1=TBL.ROW_NUM ) THEN ' ' ELSE P_NO END)P_NO,reciept_date,RECIEPT_TIME,P_PRICE
FROM tbl



วันที่ที่แสดง จะ 7 วันจากวันที่แรกในข้อมูลอ่ะค่า รบกวนด้วยนะคะ



Tag : .NET, Ms SQL Server 2012







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2018-01-21 20:25:54 By : NickyPrime View : 1346 Reply : 30
 

 

No. 1

Guest


Query บนนี้คุ้นๆ นะครับ ผมแนะนำให้คับ ลองไปศึกษา PIVOT TABLE ดูครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-22 13:48:09 By : OOP
 


 

No. 2



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : OOP เมื่อวันที่ 2018-01-22 13:48:09
รายละเอียดของการตอบ ::
มีพี่จากที่นี่แนะนำมาจ้า แต่ก็เอามาสานต่อได้นิดหน่อย ก็มาติดตรงนี้อีกแล้ว

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-22 15:18:09 By : NickyPrime
 

 

No. 3



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


ตาราง report ในรูป เป็นผลลัพท์ที่ทำได้ หรือเป็นผลลัพท์ที่ต้องการหรอครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-22 15:34:54 By : nPointXer
 


 

No. 4



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : nPointXer เมื่อวันที่ 2018-01-22 15:34:54
รายละเอียดของการตอบ ::
เป็นผลลัพธ์ที่ต้องการจ่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-22 16:25:25 By : NickyPrime
 


 

No. 5



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : NickyPrime เมื่อวันที่ 2018-01-22 16:25:25
รายละเอียดของการตอบ ::
ถ้าต้องการเอา rows เป็น columns ใช้ PIVOT TABLE ตามเม้น 1 ได้เลยครับ ผมก็ทำอยู่

พอจะมีไฟล์ backup สองตารางนั้นไหมครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-22 17:12:58 By : nPointXer
 


 

No. 6



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : nPointXer เมื่อวันที่ 2018-01-22 17:12:58
รายละเอียดของการตอบ ::
ไฟล์ Backup ค่ะ
https://drive.google.com/open?id=1IfKl8AegzmXCpyG3o8Ly1Bp8Ht_ZPSZA

รบกวนด้วยนะจ้ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-23 07:42:36 By : NickyPrime
 


 

No. 7



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 6 เขียนโดย : NickyPrime เมื่อวันที่ 2018-01-23 07:42:36
รายละเอียดของการตอบ ::
โหลดมา restore ไม่ได้ ขอ backup เป็น .bak ได้ไหมครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-24 13:47:40 By : nPointXer
 


 

No. 8



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : nPointXer เมื่อวันที่ 2018-01-24 13:47:40
รายละเอียดของการตอบ ::
ขอโทษค่ะ ไฟล์ใหม่ค่ะ
https://drive.google.com/open?id=1YA9a3Q18l1P8dOQuGGEvAtpi5cOFPehA

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-29 07:41:00 By : NickyPrime
 


 

No. 9



โพสกระทู้ ( 100 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

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
 


 

No. 10



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : SandKing เมื่อวันที่ 2018-01-29 15:54:02
รายละเอียดของการตอบ ::
ขอบคุณมากเลยจ้า ถ้าไม่เป็นการรบกวนช่วยอธิบายหน่อยได้ไหมคะ อยากศึกษาด้วยอ่ะจ่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-29 16:46:48 By : NickyPrime
 


 

No. 11



โพสกระทู้ ( 100 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

มันคือการทำ 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
 


 

No. 12



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 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


อยากได้ผลลัพธ์ประมาณนี้อ่ะค่ะ
1


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 10:34:04 By : NickyPrime
 


 

No. 13



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


สงสัยเป็นคนละ 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
 


 

No. 14

Guest


ใช้ 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
 


 

No. 15



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 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
 


 

No. 16



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 14 เขียนโดย : OOP เมื่อวันที่ 2018-01-30 11:35:34
รายละเอียดของการตอบ ::
ลองแล้วไม่ได้เลยค่ะ แล้วถ้าเกิดวันเปลี่ยนแปลงไปเรื่อยๆตามข้อมูลล่ะค่ะ เพราะไฟล์จะอัพใหม่เรื่อยๆทุกอาทิตย์อ่ะค่ะ

c


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 13:13:32 By : NickyPrime
 


 

No. 17

Guest


ผมทำใน Oracle ครับ ต้องเอาไปดัดแปลงเอง ถ้ามันมีวันที่เปลี่ยนไปเรือยๆ แนะนำให้ใส่ DECLARE ใส่ตัวแปรครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 13:30:01 By : OOP
 


 

No. 18



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 17 เขียนโดย : OOP เมื่อวันที่ 2018-01-30 13:30:01
รายละเอียดของการตอบ ::
งงมากเลยค่าาา

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 13:55:06 By : NickyPrime
 


 

No. 19

Guest


ทำเป็นแบบนี้ดู [20180109] ไม่ต้องมีเขา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 14:05:34 By : OOP
 


 

No. 20



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 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
 


 

No. 21

Guest


ลองปรับแก้เองดูคับ เพราะผมทำให้เป็นแนวทางครับ ถ้าทำให้หมดทุกอย่าง เดวต้องมาถามตลอด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 14:55:47 By : OOP
 


 

No. 22



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 21 เขียนโดย : OOP เมื่อวันที่ 2018-01-30 14:55:47
รายละเอียดของการตอบ ::
ลองมาหลายอาทิตย์แล้วค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-30 15:00:44 By : NickyPrime
 


 

No. 23



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


ให้ตายเหอะ 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
 


 

No. 24



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


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

sqlserver query
ข้างบน เป็นตัวอย่าง จาก 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
 


 

No. 25



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


อันนี้แบบแสดง 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
 


 

No. 26



โพสกระทู้ ( 26 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 25 เขียนโดย : nPointXer เมื่อวันที่ 2018-01-31 10:56:41
รายละเอียดของการตอบ ::
ถ้าตรง Pivot ไม่ Sum แต่เอาค่า ForecastNetQty ของแต่ละวัน เวลานั้นๆมาแสดงเลยอ่ะค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-31 15:52:12 By : NickyPrime
 


 

No. 27



โพสกระทู้ ( 249 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 26 เขียนโดย : NickyPrime เมื่อวันที่ 2018-01-31 15:52:12
รายละเอียดของการตอบ ::
ไม่เข้าใจคำถามครับ ว่าแต่ที่ผมทำให้ก็แสดงผลออกมาตามรูปผลลัพธ์ที่คุณให้มาใน No.12 แล้วนะครับ ติดตรงไหนอีกหรอ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-02 10:32:15 By : nPointXer
 


 

No. 28

Guest


ผมเข้าใจทุกฯคำถามและทุกฯคำตอบ
--- +55555

เห็นเด็กฯ สมัยนี้คุยกัน อ่านแล้วมันก็สนุกดี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-04 20:27:08 By : หน้าฮี
 


 

No. 29



โพสกระทู้ ( 281 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้าอยากง่ายนะครับ ให้ทำ 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
 


 

No. 30

Guest



Query เด็กฯพวกนี้ผมเคยเขียนมาตั้งแต่ยี่สิบปีที่แล้ว

(อาจจะไม่ได้อยู่ในรูปแบบนี้)


@Furikuri ขอบคุณนะสำหรับสิ่งที่ผมคิด "อย่างน้อยฯผมก็ยังคิดว่ายังมีคุณเป็นเพื่อน"


ทุกฯคำถาม/คำตอบ ผมไม่สนใจคำตอบแม้แต่นิดเดียว
มันไม่ทำให้ผมจนขึ้น หรือว่า รวยลง แม้แต่นิดเดียว



ผมฝากข้อความเตือนสติคุณเอาไว้ว่า "อะไรก็ตามที่คนอื่นเขาไม่ทำ แต่เราทำเป็นคนแรก"
ขอให้โชคดีครับและอย่าประมาทกับชีวิต

ด้วยความปราถนาดี
หน้าฮี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-11 14:26:27 By : หน้าฮี
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยดู Query ข้อมูลหน่อยค่า งมมาเป็นอาทิตย์แล้วยังไม่ได้เลย
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่