ProjectForStudy

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 392|ตอบกลับ: 13

[ถาม/ตอบ] การ Loop data compare มีปัญหา

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-11-7 13:30

    สวัสดีครับ ผมได้พัฒนาระบบจัดเก็บสินค้าตาม Location โดยทำการออกแบบแบ่งเป็นชั้นที่ 1 ถึง 5 โดยการเช็คแบ่งออกเป็น 2 ประเภท 1.ถ้ามีการเก็บสินค้าตาม Location ที่กำหนด ให้สถานะเป็นสีเขียว / 2. ถ้าไม่มีสินค้าตาม Location ที่กำหนด ให้เป็นสีดำ

    วิธีการเขียน Code
    1.สร้างตัวแปร lstofStringC1() เก็บข้อมูล Location ไว้
    2. Query Datatable ที่มีการจัดเก็บสินค้า
    3. สร้าง For Each เพื่อทำการวนลูป Location ที่มีการจัดเก็บสินค้า
    4. สร้าง If เพื่อการทำเช็ค Location ใน datatable เท่ากับ ตัวแปร lstofStringC1() ไหม
      4.1 ถ้าข้อมูลตรงกัน สถานะปุ่มเป็นสีเขียว
      4.2 ถ้าข้อมูลไม่ตรงกัน  สถานะปุ่มเป็นสีดำ
    **แต่ปัญหาที่เกิดขึ้น เช็คข้อมูลตรงกันแล้ว แต่ไปเข้า Else กลับเป็น สถานะปุ่มเป็นสีดำ ผมควรแก้ไขตรงไหนครับ  หรือมีคำแนะนำบอกได้ครับ




    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    ครึ่งชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 645 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1111

    โพสต์

    7810

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7810
    Ticket
    4351
    จิตพิสัย
    3459

    Merciful MemberInstructor

    puklit โพสต์ 2019-11-25 10:52:56 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2019-11-25 10:54
    artxyy14 ตอบกลับเมื่อ 2019-11-25 07:26
    lstofStringC1 จะรับค่ามาจากที่ประกาศค่าของตัวแปร
    lstofStringC1(0) ...



    ท่านพลาดนิดเดียวในคำสั่ง Loop For Each ในการเรียกใช้ค่า Value ของ Array ชื่อ lsofStringC1()
    ท่านใช้ lsofStringC1(0) แต่จริงต้องมีตัวแปรเพิ่มเพื่อรองรับค่าให้มันอ่านใน Array ถัดไป ในที่นี้ผมใช้ตัวแปร n จะได้ lsofStringC1(n)

    ตัวอย่างฟอร์ม (กรณีข้อมูลตรงกัน)



    ตัวอย่างโค้ด

    1. Public Class Form4

    2.     Dim dt As New DataTable()

    3.     Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    4.         SetDB() ' กำหนดข้อมูล จำลองมาจากฐานข้อมูลให้กับ DataTable ชื่อ dt
    5.         Dim lsofStringC1() = System.Configuration.ConfigurationManager.AppSettings("C1_1_Loc").Split(",")

    6.         Dim n = 0

    7.         For Each items As DataRow In dt.Rows

    8.             Dim control As Control = Controls("button" & n + 1)

    9.             If lsofStringC1(n) = items.ItemArray(0) Then
    10.                 control.BackColor = Color.Green
    11.             Else
    12.                 control.BackColor = Color.Black
    13.             End If

    14.             n += 1

    15.         Next

    16.     End Sub

    17.     Private Sub SetDB()

    18.         dt.Clear()
    19.         dt.Columns.Clear()

    20.         dt.Columns.Add("Loc", GetType(String))

    21.         dt.Rows.Add("C1-1-1")
    22.         dt.Rows.Add("C1-1-2")
    23.         dt.Rows.Add("C1-1-3")
    24.         dt.Rows.Add("C1-1-4")
    25.         dt.Rows.Add("C1-1-5")

    26.     End Sub


    27. End Class
    คัดลอกไปที่คลิปบอร์ด


    ตัวอย่างข้อมูล (ไม่ตรงกัน)

    ทีนี้ผมจำลองเปลี่ยน DataTable dt ดังนี้

    dt.Rows.Add("C1-1-1")
    dt.Rows.Add("C1-1-2")
    dt.Rows.Add("C1-1-3")
    dt.Rows.Add("C1-1-4")
    dt.Rows.Add("C1-1-7")


    ตัวอย่างฟอร์มที่ได้







    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

     เจ้าของ| artxyy14 โพสต์ 2019-11-25 15:02:37 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-11-25 15:04

    คัดลอกไปที่คลิปบอร์ด

    SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
                            FROM
                            (SELECT [transfer_location],
                                    [transfer_product],
                                    [transfer_lotno],
                                    [transfer_caseno],
                                    [tf_location_date],
                                    [tf_location_time],
                                row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
                                FROM transferslip_record_test1) a
                                WHERE  transfer_location LIKE 'C%'
                                AND rowno = 1 ไปถึงจน 5


    ผมติดปัญหาอยู่อย่างนึง คือ 1 Location สามารถเก็บของใน Location ได้หลาย Product ผมต้อง Query โดยการใช้นับลำดับที่ Location ซ้ำกัน rowno = 1 , 2 , 3, 4 ,5 ... ไปเรื่อยๆ แล้วทำการ Loop ทั้งหมด 5 รอบ
    ทำให้เกิดเว็ยโหลดช้า ผมจะสามาถ Query ครั้งเดียวแล้วเก็บข้อมูลหลาย Product ใน 1 Location ได้ไหมครับ

  • อารมณ์วันนี้
    แฮปปี้
    ครึ่งชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 645 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1111

    โพสต์

    7810

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7810
    Ticket
    4351
    จิตพิสัย
    3459

    Merciful MemberInstructor

    puklit โพสต์ 2019-11-22 16:58:50 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2019-11-23 08:05

    ไม่แน่ใจว่าท่านแก้ไขได้หรือยัง
    แล้วค่า
    lstofStringC1(0) ถึง lstofStringC1(4)
    และค่า
    item.ItemArray(0) ถึง item.ItemArray(4)

    มีค่าเป็นอะไรบ้างท่านลองแสดงผลออกมาให้ดูหน่อยครับ
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

     เจ้าของ| artxyy14 โพสต์ 2019-11-25 07:26:21 | ดูโพสต์ทั้งหมด
    puklit ตอบกลับเมื่อ 2019-11-22 16:58
    ไม่แน่ใจว่าท่านแก้ไขได้หรือยัง
    แล้วค่า
    lstofStringC1(0) ถึง  ...

    lstofStringC1 จะรับค่ามาจากที่ประกาศค่าของตัวแปร
    lstofStringC1(0) = C1-1-1
    lstofStringC1(1) = C1-1-2
    lstofStringC1(2) = C1-1-3
    lstofStringC1(3) = C1-1-4
    ---------------------------------------------------
    item.itemArray รับค่ามาจาก database
    item.itemArray(0) = C1-1-1
    item.itemArray(1) = C1-1-2
    item.itemArray(2) = C1-1-3
    item.itemArray(3) = C1-1-4
    ---------------------------------------------------
    โดยเอาข้อมูลทั้ง 2 ฝั่งมาเปรียบเทียบกัน
    1. ถ้าข้อมูลตรงกัน ให้เป็นสีเขียว  
    2 .ถ้าไม่ตรงกัน ให้เป็นสีดำ

    หรือมีคำแนะนำบอกได้นะครับ
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

     เจ้าของ| artxyy14 โพสต์ 2019-11-25 14:47:16 | ดูโพสต์ทั้งหมด
    ขอบคุณครับ คุณ : puklit
  • อารมณ์วันนี้
    แฮปปี้
    ครึ่งชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 645 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1111

    โพสต์

    7810

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7810
    Ticket
    4351
    จิตพิสัย
    3459

    Merciful MemberInstructor

    puklit โพสต์ 2019-11-25 15:40:45 | ดูโพสต์ทั้งหมด
    artxyy14 ตอบกลับเมื่อ 2019-11-25 15:02
    SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
           ...

    เอาตารางฐานข้อมูลท่านมาดูได้ไหมครับ
    1. ท่านออกแบบไว้อย่างไร
    2. ท่านต้องการผลลัพธ์อย่างไร
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

     เจ้าของ| artxyy14 โพสต์ 2019-11-25 16:33:00 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-11-26 07:28
    puklit ตอบกลับเมื่อ 2019-11-25 15:40
    เอาตารางฐานข้อมูลท่านมาดูได้ไหมครับ
    1. ท่านออกแบบไว้อย่างไร
    2. ท่านต้องการผลลัพธ์อย่างไร

    ผลลัพธ์ที่ผมต้องการคือ Query ครั้งเดียวแล้วนำค่าของ Location ที่ซ้ำกันมาแสดงตามตัวอย่าง 1. C9-7-1/Z-18PTR/9316AM/9-12,  2. C9-7-1/Z-20PT/9297JT/38-48 เพราะวิธีของผมจะต้อง Query หลายครั้งเพื่อที่จะเอาค่าของ Location ที่ซ้ำกันออกมาแสดงผลลัพธ์  เพราะทำให้เวลาโหลดหน้า Web Browser ใช้เวลานานมากครับ
    1.                     sqlstr = "SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
    2.                             FROM
    3.                             (SELECT [transfer_location],
    4.                                     [transfer_product],
    5.                                     [transfer_lotno],
    6.                                     [transfer_caseno],
    7.                                     [tf_location_date],
    8.                                     [tf_location_time],
    9.                                 row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
    10.                                 FROM transferslip_record_test1) a
    11.                                 WHERE  transfer_location LIKE 'C%'
    12.                                 AND rowno = 1"


    13.                     da = New SqlDataAdapter(sqlstr, Conn)
    14.                     dt = New DataTable
    15.                     da.Fill(dt)

    16.                     sqlstr = "SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
    17.                             FROM
    18.                             (SELECT [transfer_location],
    19.                                     [transfer_product],
    20.                                     [transfer_lotno],
    21.                                     [transfer_caseno],
    22.                                     [tf_location_date],
    23.                                     [tf_location_time],
    24.                                 row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
    25.                                 FROM transferslip_record_test1) a
    26.                                 WHERE  transfer_location LIKE 'C%'
    27.                                 AND rowno = 2"
    28.                     da = New SqlDataAdapter(sqlstr, Conn)
    29.                     dt2 = New DataTable
    30.                     da.Fill(dt2)

    31.                     sqlstr = "SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
    32.                             FROM
    33.                             (SELECT [transfer_location],
    34.                                     [transfer_product],
    35.                                     [transfer_lotno],
    36.                                     [transfer_caseno],
    37.                                     [tf_location_date],
    38.                                     [tf_location_time],
    39.                                 row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
    40.                                 FROM transferslip_record_test1) a
    41.                                 WHERE  transfer_location LIKE 'C%'
    42.                                 AND rowno = 3"

    43.                     da = New SqlDataAdapter(sqlstr, Conn)
    44.                     dt3 = New DataTable
    45.                     da.Fill(dt3)


    46.                     sqlstr = "SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
    47.                             FROM
    48.                             (SELECT [transfer_location],
    49.                                     [transfer_product],
    50.                                     [transfer_lotno],
    51.                                     [transfer_caseno],
    52.                                     [tf_location_date],
    53.                                     [tf_location_time],
    54.                                 row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
    55.                                 FROM transferslip_record_test1) a
    56.                                 WHERE  transfer_location LIKE 'C%'
    57.                                 AND rowno = 4"

    58.                     da = New SqlDataAdapter(sqlstr, Conn)
    59.                     dt4 = New DataTable
    60.                     da.Fill(dt4)


    61.                     sqlstr = "SELECT [transfer_location], [transfer_product], [transfer_lotno], [transfer_caseno], [rowno]
    62.                             FROM
    63.                             (SELECT [transfer_location],
    64.                                     [transfer_product],
    65.                                     [transfer_lotno],
    66.                                     [transfer_caseno],
    67.                                     [tf_location_date],
    68.                                     [tf_location_time],
    69.                                 row_number() OVER (PARTITION BY [transfer_location] ORDER BY [tf_location_date] ASC, [tf_location_time] ASC) rowno
    70.                                 FROM transferslip_record_test1) a
    71.                                 WHERE  transfer_location LIKE 'C%'
    72.                                 AND rowno = 5"

    73.                     da = New SqlDataAdapter(sqlstr, Conn)
    74.                     dt5 = New DataTable
    75.                     da.Fill(dt5)

    76.                     Conn.Close()


    77.                     Dim green As Color = Color.FromArgb(40, 167, 69)
    78.     Dim black As Color = Color.FromArgb(0, 0, 0)
    79.     Dim blank_msg As String = "Empty"
    80.     Dim b As Boolean = False


    81.     For Each item As DataRow In dt.Rows

    82.     Dim FirstLayer As String = item.ItemArray(0).ToString
    83.     Dim FirstProduct As String = item.ItemArray(1).ToString
    84.     Dim FirstLotNo As String = item.ItemArray(2).ToString
    85.     Dim FirstCaseNo As String = item.ItemArray(3).ToString

    86.     If arrayList = FirstLayer Then

    87.                             b = True
    88.                             label.Text = String.Format("{0} / ({1}, {2}, {3})", FirstLayer, FirstProduct, FirstLotNo, FirstCaseNo)

    89.                         End If

    90.     If b = True Then

    91.                             button.BackColor = green

    92.                         Else

    93.                             button.BackColor = black
    94.                             label.Text = blank_msg

    95.                         End If

    96.     For Each item2 As DataRow In dt2.Rows

    97.     Dim SecondLayer As String = item2.ItemArray(0).ToString
    98.     Dim SecondProduct As String = item2.ItemArray(1).ToString
    99.     Dim SecondLotNo As String = item2.ItemArray(2).ToString
    100.     Dim SecondCaseNo As String = item2.ItemArray(3).ToString

    101.     If (arrayList = FirstLayer) And (arrayList = SecondLayer) Then label.Text =
    102.                                 String.Format("{0} / ({1}, {2}, {3}) / ({4}, {5}, {6})",
    103.                                               FirstLayer, FirstProduct, FirstLotNo, FirstCaseNo,
    104.                                               SecondProduct, SecondLotNo, SecondCaseNo)


    105.     For Each item3 As DataRow In dt3.Rows

    106.     Dim ThirdLayer As String = item3.ItemArray(0).ToString
    107.     Dim ThirdProduct As String = item3.ItemArray(1).ToString
    108.     Dim ThirdLotNo As String = item3.ItemArray(2).ToString
    109.     Dim ThirdCaseNo As String = item3.ItemArray(3).ToString

    110.     If (arrayList = FirstLayer) And (arrayList = SecondLayer) And (arrayList = ThirdLayer) Then label.Text =
    111.                                     String.Format("{0} / ({1}, {2}, {3}) / ({4}, {5}, {6}) / ({7}, {8}, {9})",
    112.                                                   FirstLayer, FirstProduct, FirstLotNo, FirstCaseNo,
    113.                                                   SecondProduct, SecondLotNo, SecondCaseNo,
    114.                                                   ThirdProduct, ThirdLotNo, ThirdCaseNo)


    115.     For Each item4 As DataRow In dt4.Rows

    116.     Dim FourthLayer As String = item4.ItemArray(0).ToString
    117.     Dim FourthProduct As String = item4.ItemArray(1).ToString
    118.     Dim FourthLotNo As String = item4.ItemArray(2).ToString
    119.     Dim FourthCaseNo As String = item4.ItemArray(3).ToString

    120.     If (arrayList = FirstLayer) And (arrayList = SecondLayer) And (arrayList = ThirdLayer) And (arrayList = FourthLayer) Then label.Text =
    121.                                         String.Format("{0} / ({1}, {2}, {3}) / ({4}, {5}, {6}) / ({7}, {8}, {9}) / ({10}, {11}, {12})",
    122.                                                       FirstLayer, FirstProduct, FirstLotNo, FirstCaseNo,
    123.                                                       SecondProduct, SecondLotNo, SecondCaseNo,
    124.                                                       ThirdProduct, ThirdLotNo, ThirdCaseNo,
    125.                                                       FourthProduct, FourthLotNo, FourthCaseNo)


    126.     Next

    127.     Next

    128.     Next

    129.     Next
    คัดลอกไปที่คลิปบอร์ด

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    ครึ่งชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 645 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1111

    โพสต์

    7810

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7810
    Ticket
    4351
    จิตพิสัย
    3459

    Merciful MemberInstructor

    puklit โพสต์ 2019-11-26 10:38:37 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2019-11-26 10:54
    artxyy14 ตอบกลับเมื่อ 2019-11-25 16:33
    ผลลัพธ์ที่ผมต้องการคือ Query ครั้งเดียวแล้วนำค่าของ Loc ...

    ผมเห็นท่านสร้าง Query แล้วดึงมาเก็บใน DataTable ชื่อ dt - dt5 ความเข้าใจผมคือ 1 Location มี Row no = 1 ถึง 5 ใช่ไหมครับ
    ที่ท่านได้ดึงมาทีละ 1 Row no เพื่อแยกมาเข้า DataTable ชื่อ dt - dt5
    แล้วค่อยนำมาเปรียบเทียบกัน จุดนี้ผมเข้าใจถูกต้องหรือไม่ครับ

    ถ้าใช่ผมมีตัวอย่างของการสร้าง Query แบบ Pivot ให้ท่านได้ดูเป็นกรณีตัวอย่าง
    1. ช่วยลดการ Query หลาย ๆ รอบ (มันช่วยเพิ่ม ประสิทธิภาพแน่นอน)
    2. ไม่ต้องวน Loop หลายๆ รอบหรือ หลายๆ ชั้น และตัดสินในหลาย ๆ รอบ (มันช่วยเพิ่ม ประสิทธิภาพแน่นอน)

    ตัวอย่างฐานข้อมูล ผมสร้างขึ้นมาดังนี้



    การเขียน Query แบบ Pivot จะได้ผลลัทธ์ดังนี้
    ผมใช้วิธีการนับ 0 คือไม่มีสินค้าจัดเก็บ , และมากกว่า 0 คือมีสินค้าจัดเก็บทีนี้ ท่านก็เอา 0 กับ 1 ไปกำหนดสถานะให้กับปุ่ม สีเขียว และสีดำ ได้เลย


    หรือท่านจะเอา Location ขึ้นก่อน Product ก็ได้ (แล้วแต่ความต้องการของท่าน) เช่น


    มันจะลดการดึงข้อมูลหลาย ๆ ครั้ง เหลือเพียงครั้งเดียว แล้วให้ท่านนำข้อมูลที่ได้ มาใส่ DataTable แล้วค่อยนำไปเช็คในแต่ละ Location และ Row No ต่อไป
    หวังว่าตัวอย่างนี้คงเป็นประโยชน์กับท่านนะครับ

    หากท่านต้องการหาข้อมูลเพิ่มเติมเกี่ยวกับ Pivot ของ Sql server ดังนี้
    https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15

    https://www.techonthenet.com/sql_server/pivot.php







    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 21:37
  • เช็คชื่อแล้ว: 662 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    759

    โพสต์

    2490

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2490
    Ticket
    684
    จิตพิสัย
    1806

    Expert Online

     เจ้าของ| artxyy14 โพสต์ 2019-11-26 11:53:00 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-11-26 12:07
    puklit ตอบกลับเมื่อ 2019-11-26 10:38
    ผมเห็นท่านสร้าง Query แล้วดึงมาเก็บใน DataTable ชื่อ dt - dt5 ค ...

    ขอบคุณสำหรับความรู้นะครับ

    ผมสื่อสารไม่ตรงกับคุณ puklit  555+ ผมผิดเอง

    ผลลัพธ์ที่อยากได้ ตามรูปภาพที่คือ Location: C15-1-3 มี 2 Product ที่ซ้อนกัน ใน 1 Location เพราะเวลาคลิกที่ปุ่มจะขึ้นรายละเอียดตามนี้ครับ

    ส่วนตารางฐานข้อมูลตรง Row_no ผมทำการสร้างขึ้นมาเพื่อเช็คค่าซ้ำของ Location ตามลำดับไปเรื่อยๆ ที่มีค่าซ้ำกัน 1 2 3 ....  โดยผม ORDER BY  ตามวันที่ / เวลา จากน้อยไปมาก แล้วจะ WHERE Row_No = 1 / 2 / 3  เพื่อดึงข้อมูล Location /  Product / LotNo / Caseno มาแสดงต่อๆกันตามดังรูปครับ
    Row_Number ที่ผมเอา Query
    https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-ver15

    #จำลองผลลัพธ์จากรูปภาพนะครับ

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
    ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

    รายละเอียดเครดิต

    ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|ProjectForStudy  

    GMT+7, 2020-8-9 23:27 , Processed in 0.037168 second(s), 27 queries .

    Powered by Discuz! X3.2 R20150609, Rev.38

    © 2001-2013 Comsenz Inc.

    ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้