• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Nhờ FULL OUTER JOIN 2 bảng dữ liệu này giúp với

Chuyên mục thảo luận các vấn đề liên quan đến ứng dụng quản lý và cơ sở dữ liệu

Điều hành viên: Điều hành

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 473
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Nhờ FULL OUTER JOIN 2 bảng dữ liệu này giúp với

Gửi bàigửi bởi muaphonui_2010 » T.Năm 25/08/2016 4:47 pm

Chào các bạn.
Mình có 2 code này để lấy dữ liệu.

Mã: Chọn hết

ALTER PROCEDURE [dbo].[sp_kehoachxuatcong]
@txttungay date,
@txtdenngay date ,
@madonvi nvarchar(20)

AS BEGIN

-- Code Lấy dữ liệu thứ nhất
DECLARE @SQL AS NVARCHAR(2000)
DECLARE @Colngaythang AS NVARCHAR(2000)
SET @Colngaythang = (SELECT STUFF(
(SELECT DISTINCT ', ' + quotename([thangnam], ']') FROM #kehoachxuatcong_group FOR XML PATH('')), 1, 1, ''))
SET @SQL = ' SELECT * FROM
(SELECT MaKhach, TongkeHoach, socong,[thangnam] FROM #kehoachxuatcong_group)s1
PIVOT (
SUM(socong) FOR [thangnam] IN (' + @Colngaythang + ')
)s2'
EXECUTE( @SQL)

--Code lấy dữ liệu thứ 2
DECLARE @SQL1 AS NVARCHAR(2000)
DECLARE @Colngaythang1 AS NVARCHAR(2000)

SET @Colngaythang1 = (SELECT STUFF(
(SELECT DISTINCT ', ' + quotename([thangnam], ']') FROM #thucxuatcong_group FOR XML PATH('')), 1, 1, ''))
SET @SQL1 = ' SELECT * FROM
(SELECT MaKhach, TongDaXuat, socong,[thangnam] FROM #thucxuatcong_group)s1
PIVOT (
SUM(socong) FOR [thangnam] IN (' + @Colngaythang1 + ')
)s2'
EXECUTE( @SQL1)

'==> Với 2 code @SQL và @SQL1 thfi nó sẽ trả về 2 bảng dữ liệu.

--Bây giờ mình muốn lấy dữ liệu của @SQL và @SQL1 trên để "FULL OUTER JOIN" thì làm như thế nào vậy các bạn.

Ví dụ mình muốn==> để nó trả về 1 bảng dữ liệu hoàn chỉnh.
SELECT dbo.Table_1.makhach , dbo.Table_1.col1, dbo.Table_1.col2, dbo.Table_2.col4, dbo.Table_2.col5
FROM dbo.Table_1 FULL OUTER JOIN
dbo.Table_2 ON dbo.Table_1.makhach = dbo.Table_2.makhach


Nhờ các bạn giúp mình với.
Xin chân thành cảm ơn!



FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Nhờ FULL OUTER JOIN 2 bảng dữ liệu này giúp với

Gửi bàigửi bởi FlyingFox » T.Hai 29/08/2016 8:31 am

Để trả nó về 1 bảng tạm nào đó thì dùng INTO, trong trường hợp này có thể viết như sau:
  1. ALTER PROCEDURE [dbo].[sp_kehoachxuatcong]
  2. @txttungay DATE,
  3. @txtdenngay DATE ,
  4. @madonvi nvarchar(20)
  5.  
  6. AS BEGIN
  7.  
  8. -- Code Lấy dữ liệu thứ nhất
  9. DECLARE @SQL AS NVARCHAR(2000)
  10. DECLARE @Colngaythang AS NVARCHAR(2000)
  11. SET @Colngaythang = (SELECT STUFF(
  12. (SELECT DISTINCT ', ' + quotename([thangnam], ']') FROM #kehoachxuatcong_group FOR XML PATH('')), 1, 1, ''))
  13. SET @SQL = ' SELECT * INTO #temp1 FROM
  14. (SELECT MaKhach, TongkeHoach, socong,[thangnam] FROM #kehoachxuatcong_group)s1
  15. PIVOT (
  16. SUM(socong) FOR [thangnam] IN (' + @Colngaythang + ')
  17. )s2'
  18. EXECUTE( @SQL)
  19.  
  20. --Code lấy dữ liệu thứ 2
  21. DECLARE @SQL1 AS NVARCHAR(2000)
  22. DECLARE @Colngaythang1 AS NVARCHAR(2000)
  23.  
  24. SET @Colngaythang1 = (SELECT STUFF(
  25. (SELECT DISTINCT ', ' + quotename([thangnam], ']') FROM #thucxuatcong_group FOR XML PATH('')), 1, 1, ''))
  26. SET @SQL1 = ' SELECT * INTO #temp2 FROM
  27. (SELECT MaKhach, TongDaXuat, socong,[thangnam] FROM #thucxuatcong_group)s1
  28. PIVOT (
  29. SUM(socong) FOR [thangnam] IN (' + @Colngaythang1 + ')
  30. )s2'
  31. EXECUTE( @SQL1)
  32.  
  33. '==> Với 2 code @SQL và @SQL1 thfi nó sẽ trả về 2 bảng dữ liệu.
  34.  
  35. --Bây giờ mình muốn lấy dữ liệu của @SQL và @SQL1 trên để "FULL OUTER JOIN" thì làm như thế nào vậy các bạn.
  36.  
  37. Ví dụ mình muốn==> để nó trả về 1 bảng dữ liệu hoàn chỉnh.
  38. SELECT #temp1.makhach , #temp1.col1, #temp1.col2, #temp2.col4, #temp2.col5
  39. FROM #temp1 FULL OUTER JOIN
  40. #temp2 ON #temp1.makhach = #temp2.makhach

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 473
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Re: Nhờ FULL OUTER JOIN 2 bảng dữ liệu này giúp với

Gửi bàigửi bởi muaphonui_2010 » T.Tư 31/08/2016 9:40 am

Hi anh!
Cảm ơn anh nhiều.
Lúc đầu em cũng thử code như anh nhưng nó vẫn bị lỗi. Em mò và làm được theo code này anh ah.
  1.  
  2. --Dữ liệu thứ nhất
  3.   DECLARE @TabName0 VARCHAR(40)
  4. SELECT @TabName0='##'+REPLACE(CAST(NEWID() AS VARCHAR(40)),'-','')
  5.  
  6. DECLARE @SQL AS NVARCHAR(2000)
  7. DECLARE @Colngaythang AS NVARCHAR(2000)
  8. SET @Colngaythang = (SELECT STUFF(
  9.         (SELECT DISTINCT ', ' + quotename([thangnam], ']') FROM #kehoachxuatcong_group  FOR XML PATH('')), 1, 1, ''))
  10. SET @SQL = ' SELECT * into ' + @TabName0 + ' FROM
  11.                        (SELECT  MaKhach, TongkeHoach, socong,[thangnam] FROM #kehoachxuatcong_group)s1
  12.                                PIVOT (
  13.                                        SUM(socong) FOR [thangnam] IN (' + @Colngaythang + ')                          
  14.                                )s2'
  15. Print @SQL
  16. EXECUTE(@SQL)
  17.  
  18. --Dữ liệu thứ 2
  19.  
  20. DECLARE @TabName1 VARCHAR(40)
  21. SELECT @TabName1='##'+REPLACE(CAST(NEWID() AS VARCHAR(40)),'-','')
  22.  
  23. DECLARE @SQL1 AS NVARCHAR(2000)
  24. DECLARE @Colngaythang1 AS NVARCHAR(2000)
  25.  
  26.  
  27.      
  28. SET @Colngaythang1 = (SELECT STUFF(
  29.         (SELECT DISTINCT ', ' + quotename([thangnam], ']')   FROM #thucxuatcong_group  FOR XML PATH('')), 1, 1, ''))
  30. SET @SQL1 = ' SELECT * into ' + @TabName1 + ' FROM
  31.                        (SELECT  MaKhach, TongDaXuat, socong,[thangnam] FROM #thucxuatcong_group)s1
  32.                                PIVOT (SUM(socong) FOR [thangnam] IN (' + @Colngaythang1 + '))s2'                      
  33.  
  34. Print @SQL1
  35. EXECUTE(@SQL1)
  36.  
  37. IF (SELECT COUNT(*) FROM #thucxuatcong_group) > 0
  38.   BEGIN
  39. SELECT @SQL = 'Select * from ' + @Tabname0 + ' FULL OUTER JOIN ' + @Tabname1 + ' ON ' + @Tabname0 + '.[makhach] = '+ @Tabname1 + '.[makhach]'
  40. END;
  41. ELSE
  42.   BEGIN
  43.       SELECT @SQL = 'Select * from ' + @Tabname0
  44.   END;
  45. EXECUTE(@SQL)
  46.  


==> Với code này thì nó chạy ok rồi anh ah.
Nó khác code của anh ở 1 chỗ là into ' + @TabName1 + '.
Cảm ơn anh nhé.


Quay về “Ứng dụng Quản lý và Cơ sở dữ liệu”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách