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,037

HOME > .NET Framework > Forum > SQL Serverข้อมูลที่ join กัน มีค่าซ้ำกัน รบกวนช่วยดู Code ทีจ้า



 

SQL Serverข้อมูลที่ join กัน มีค่าซ้ำกัน รบกวนช่วยดู Code ทีจ้า

 



Topic : 081613



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



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




ทำใน SQL Server ค่ะ ต้องการให้ข้อมูลที่เราเลือก ในช่วงเวลานั้นๆออกมาแสดงผล ตามต้องการ ซึ่งที่เขียนมา เวลาออกมาถูกแล้ว
แต่ฟิลด์อื่นๆที่ต้องแสดงพร้อมกับเวลา เกิดมีค่าซ้ำกัน
ต้องแก้ตรงไหนอะค่ะ ติดอยู่หลายวันนานมากกกก รบกวนช่วยดู Code ให้ทีนะคะ T_T

Code (ASP)
SELECT DISTINCT tm.mDatetime as ‘เวลา’,tm.tMoney as ‘เงิน’,tl.usrID as ‘รหัส’,tid.nameID as ‘ชื่อ’
From tableMoney tm inner join tableLogin tl on CONVERT(nvarchar(10),tm.mDatetime,126)=CONVERT(nvarchar(10),tl.startTime,126)
inner join tableID tid on tid.caUser_ID=tl.usrID
WHERE CONVERT(nvarchar(10),tl.startTime,126)='2012-01-19'
AND CONVERT(nvarchar(10),tm.mDatetime,126)='2012-01-19'
AND CONVERT(nvarchar(10),tm.mDatetime,114) >= Convert(nvarchar(10),tl.startTime,114)
AND CONVERT(nvarchar(10),tm.mDatetime,114) <= Convert(nvarchar(10),tl.endTime,114)
AND CONVERT(datetime,(CONVERT(nvarchar(10),tm.mDatetime,114)),114) BETWEEN '06:30:00' and '12:30:00'



ข้อมูลตารางที่ใช้ มี 3 ตาราง คือ
tableMoney
tMoney | mDatetime(datetime)
100.00 | 2012-01-19 07:05:43.546
200.00 | 2012-01-19 08:32:53.138
60.00 | 2012-01-19 09:55:21.751
40.00 | 2012-01-19 10:49:59.947
50.00 | 2012-01-19 11:19:61.847


tableLogin
usrID | startTime(datetime) | endTime(datetime)
00001 | 2012-01-19 07:00:12.329 | 2012-01-19 09:59:55.284
00002 | 2012-01-19 10:05:12.376 | 2012-01-19 12:45:26.142


tableID
usrID | nameID
00001 | Test01
00002 | Test02

ที่ query ข้อมูลออกมาได้ตอนนี้ คือ
เวลา | เงิน | รหัส | ชื่อ
2012-01-19 07:05:43.546 | 100.00 | 00001 | Test01
2012-01-19 07:05:43.546 | 100.00 | 00002 | Test02
2012-01-19 08:32:53.138 | 200.00 | 00001 | Test01
2012-01-19 09:55:21.751 | 60.00 | 00001 | Test01
2012-01-19 09:55:21.751 | 60.00 | 00002 | Test02
2012-01-19 10:49:59.947 | 40.00 | 00001 | Test01
2012-01-19 10:49:59.947 | 40.00 | 00002 | Test02
2012-01-19 11:19:61.847 | 50.00 | 00002 | Test02



ผลลัพธ์ที่อยากได้จริงๆคือ
เวลา | เงิน | รหัส | ชื่อ
2012-01-19 07:05:43.546 | 100.00 | 00001 | Test01
2012-01-19 08:32:53.138 | 200.00 | 00001 | Test01
2012-01-19 09:55:21.751 | 60.00 | 00001 | Test01
2012-01-19 10:49:59.947 | 40.00 | 00002 | Test02
2012-01-19 11:19:61.847 | 50.00 | 00002 | Test02


และอยากให้เวลา แสดงได้แค่ 2012-01-19 07:05:43 พอ ต้องเขียนยังไงค่ะ ได้แต่แบบ 07:05:43 อย่างเดียว


รบกวนผู้รู้ช่วยดูให้ทีนะค่ะ ขอบคุณล่วงหน้ามากๆๆค่ะ



Tag : .NET, Ms SQL Server 2005, Ms SQL Server 2008, Ms SQL Server 2012, Web (ASP.NET), VS 2010 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2012-07-27 09:27:55 By : porn_toon View : 1523 Reply : 8
 

 

No. 1



โพสกระทู้ ( 1,348 )
บทความ ( 1 )



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


tableMoney ควรจะ column usrID ด้วยมิใช่หรือ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 09:41:39 By : watcharop
 


 

No. 2



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



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


ไม่มี usrID ในตาราง Money ให้อ่าคะ

เลยต้องใช้วิธี join กัน งงไปหมดเลย T_T


ประวัติการแก้ไข
2012-07-27 10:11:23
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 10:10:51 By : porn_toon
 

 

No. 3

Guest


งงตรง nverchar(10)

ใช้เงื่อนไขเป็น datetime ทำไมไม่ convert เป็น datetime หรือ smalldatetime ล่ะ

ใช้ string มันได้ไม่ได้ความหมายเหมือน datetime หรอก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 10:31:02 By : อิอิ
 


 

No. 4



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



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


ลองแปลงเป็น datetime หรือ smalldatetime แล้ว ข้อมูลออกมาไม่ครบตามเงื่อนไขในระยะเวลานั้นๆอะคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 10:58:19 By : porn_toon
 


 

No. 5

Guest


สามารถเป็น query ให้ออกมาเหมือนที่ จขกท ต้องการนะ

แต่ว่าถ้าจะใช้งานจริงๆ การเก็บข้อมูลเช่นนี้ไม่พอดีจะทำงานหรอก

เช่นในกรณี user1 กับ user2 เข้ามาใช้งานในเวลาใกล้ๆ กัน

เราจะรู้ได้ไงว่า user ไหน เป็นผู้ทำ tablemoney เรคคอร์ดนั้น

แต่ก็ยังยืนยันว่า datetime ดีกว่า string นะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 11:29:10 By : อิอิ
 


 

No. 6



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



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


งั้น รบกวน ช่วยแก้ไข Code ให้หน่อยได้ไหมค่ะ งงมากก รบกวนด้วยย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 12:07:29 By : porn_toon
 


 

No. 7

Guest


รบกวนคนใจดีแปลงจาก linq เป็น sql command ทีครับ

test

Code (C#)
        private void buttonRun_Click(object sender, EventArgs e)
        {
            DataTable DtMoney = GetTableMoney();
            DataTable DtLogin = GetTableLogin();
            DataTable DtId = GetTableID();

            var data = from m in DtMoney.AsEnumerable()
                       select new 
                       {
                           mDatetime = m.Field<DateTime>("mDatetime"),
                           tMoney = m.Field<double>("tMoney"),
                           usrID = (from l in DtLogin.AsEnumerable()
                                    where l.Field<DateTime>("startTime") <= m.Field<DateTime>("mDatetime") && l.Field<DateTime>("endTime") >= m.Field<DateTime>("mDatetime")
                                    select l.Field<string>("usrID")).First(),
                           nameID = (from l in DtLogin.AsEnumerable()
                                     join i in DtId.AsEnumerable() on l.Field<string>("usrID") equals i.Field<string>("usrID")
                                     where l.Field<DateTime>("startTime") <= m.Field<DateTime>("mDatetime") && l.Field<DateTime>("endTime") >= m.Field<DateTime>("mDatetime")
                                     select i.Field<string>("nameID")).First()
                       };

            dataGridView1.DataSource = data.ToList();
        }

        private DataTable GetTableMoney()
        {
            string[][] data = new string[][]
            {
                new string[] { "100.00", "2012-01-19 07:05:43.546" },
                new string[] { "200.00", "2012-01-19 08:32:53.138" },
                new string[] { "60.00", "2012-01-19 09:55:21.751" },
                new string[] { "40.00", "2012-01-19 10:49:59.947" },
                new string[] { "50.00", "2012-01-19 11:19:61.847" }
            };

            DataTable DtData = new DataTable();
            DtData.Columns.Add(new DataColumn("tMoney", typeof(double)));
            DtData.Columns.Add(new DataColumn("mDatetime", typeof(DateTime)));

            foreach (string[] aData in data)
            {
                string[] _date = aData[1].Split(("- :.").ToCharArray());
                DateTime date = new DateTime(Convert.ToInt32(_date[0]), Convert.ToInt32(_date[1]), Convert.ToInt32(_date[2]));

                DataRow DrNew = DtData.NewRow();
                DrNew["tMoney"] = Convert.ToDouble(aData[0]);
                DrNew["mDatetime"] = date.AddHours(Convert.ToInt32(_date[3])).AddMinutes(Convert.ToInt32(_date[4])).AddSeconds(Convert.ToInt32(_date[5])).AddMilliseconds(Convert.ToInt32(_date[6]));
                DtData.Rows.Add(DrNew);
            }

            return DtData;
        }

        private DataTable GetTableLogin()
        {
            string[][] data = new string[][]
            {
                new string[] { "00001", "2012-01-19 07:00:12.329", "2012-01-19 09:59:55.284" },
                new string[] { "00002", "2012-01-19 10:05:12.376", "2012-01-19 12:45:26.142" }
            };

            DataTable DtData = new DataTable();
            DtData.Columns.Add(new DataColumn("usrID", typeof(string)));
            DtData.Columns.Add(new DataColumn("startTime", typeof(DateTime)));
            DtData.Columns.Add(new DataColumn("endTime", typeof(DateTime)));

            foreach (string[] aData in data)
            {
                string[] _dateStart = aData[1].Split(("- :.").ToCharArray());
                DateTime dateStart = new DateTime(Convert.ToInt32(_dateStart[0]), Convert.ToInt32(_dateStart[1]), Convert.ToInt32(_dateStart[2]));

                string[] _dateEnd = aData[2].Split(("- :.").ToCharArray());
                DateTime dateEnd = new DateTime(Convert.ToInt32(_dateEnd[0]), Convert.ToInt32(_dateEnd[1]), Convert.ToInt32(_dateEnd[2])); 
                
                DataRow DrNew = DtData.NewRow();
                DrNew["usrID"] = aData[0];
                DrNew["startTime"] = dateStart.AddHours(Convert.ToInt32(_dateStart[3])).AddMinutes(Convert.ToInt32(_dateStart[4])).AddSeconds(Convert.ToInt32(_dateStart[5])).AddMilliseconds(Convert.ToInt32(_dateStart[6]));
                DrNew["endTime"] = dateEnd.AddHours(Convert.ToInt32(_dateEnd[3])).AddMinutes(Convert.ToInt32(_dateEnd[4])).AddSeconds(Convert.ToInt32(_dateEnd[5])).AddMilliseconds(Convert.ToInt32(_dateEnd[6]));
                DtData.Rows.Add(DrNew);
            }

            return DtData;
        }

        private DataTable GetTableID()
        {
            string[][] data = new string[][]
            {
                new string[] { "00001", "Test01" },
                new string[] { "00002", "Test02" }
            };

            DataTable DtData = new DataTable();
            DtData.Columns.Add(new DataColumn("usrID", typeof(string)));
            DtData.Columns.Add(new DataColumn("nameID", typeof(string)));

            foreach (string[] aData in data)
            {
                DataRow DrNew = DtData.NewRow();
                DrNew["usrID"] = aData[0];
                DrNew["nameID"] = aData[1];
                DtData.Rows.Add(DrNew);
            }

            return DtData;
        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-27 15:25:48 By : อิอิ
 


 

No. 8



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



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


SELECT DISTINCT tm.mDatetime as ‘เวลา’,tm.tMoney as ‘เงิน’,tl.usrID as ‘รหัส’,tid.nameID as ‘ชื่อ’
From tableMoney tm inner join tableLogin tl on CONVERT(nvarchar(10),tm.mDatetime,126)=CONVERT(nvarchar(10),tl.startTime,126)
LEFT JOIN tableID tid on tid.caUser_ID=tl.usrID
WHERE CONVERT(nvarchar(10),tl.startTime,126)='2012-01-19'
AND CONVERT(nvarchar(10),tm.mDatetime,126)='2012-01-19'
AND CONVERT(nvarchar(10),tm.mDatetime,114) >= Convert(nvarchar(10),tl.startTime,114)
AND CONVERT(nvarchar(10),tm.mDatetime,114) <= Convert(nvarchar(10),tl.endTime,114)
AND CONVERT(datetime,(CONVERT(nvarchar(10),tm.mDatetime,114)),114) BETWEEN '06:30:00' and '12:30:00'

ลองดูนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-31 03:31:26 By : eazycorner
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : SQL Serverข้อมูลที่ join กัน มีค่าซ้ำกัน รบกวนช่วยดู Code ทีจ้า
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 04
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 อัตราราคา คลิกที่นี่