Hiển thị kết quả từ 1 đến 4 / 4

Chủ đề: Cau lenh SQL

  1. #1
    Tham gia
    02-04-2007
    Bài viết
    58
    Like
    1
    Thanked 1 Time in 1 Post

    Hạnh phúc Cau lenh SQL

    Chào các bạn mình có 2 table như sau:
    Table A(A0 char,A1 number,A2 number,A3 number,A4 number,A5 number)
    Key là A0
    values('201308', 4,7,8,9,9)
    Table B(B0 char,B1 char,B2 char,B3 char,B4 char,B5 char)
    Key là B0
    values('201308','A1+A2','A3+A4','A5',''A5-A1,'A4*A2')
    Mình có 1 câu hỏi muốn nhờ các bạn như sau. Mình cần 1 câu truy vấn trả về kết quả là công thức có sẵn trong table B.
    ví dụ: select B1 from A, B where A0=B0
    kết quả trả về là 11
    nhưng nếu câu truy vấn như trên thì không thể ai có cách nào chỉ giáo dùm với. Tanks mọi người nhiều.
    Quote Quote

  2. #2
    Tham gia
    13-06-2003
    Location
    TP. Hồ Chí Minh
    Bài viết
    423
    Like
    0
    Thanked 0 Times in 0 Posts
    Chỉ là đề nghị. Bạn có thể tham khảo và điều chỉnh cho thích hợp:

    CREATE TABLE #A(A0 nvarchar(20),A1 decimal(20,5) DEFAULT(0),A2 decimal(20,5) DEFAULT(0),A3 decimal(20,5) DEFAULT(0),A4 decimal(20,5) DEFAULT(0),A5 decimal(20,5) DEFAULT(0))
    INSERT INTO #A VALUES('201308', 4,7,8,9,9)
    CREATE TABLE #B(B0 nvarchar(20),B1 nvarchar(20),B2 nvarchar(20),B3 nvarchar(20),B4 nvarchar(20),B5 nvarchar(20))
    INSERT INTO #B VALUES('201308','A1+A2','A3+A4','A5','A5-A1','A4*A2')

    DECLARE
    @st nvarchar(20)

    SELECT
    @st = B1
    FROM
    #B
    WHERE
    #B.B0 = '201308'

    SET @st = 'SELECT ' + @st + ' FROM #A WHERE A0 = ''201308'''

    EXEC(@st)

    DROP TABLE #A
    DROP TABLE #B

  3. #3
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Nếu kết quả chỉ có 1 dòng thì dùng giải pháp sql động như trên được.
    Nếu nhiều hơn một dòng, mỗi B1 khác nhau thì phải làm một vòng lặp và UNION ALL chúng lại à?

    Nếu nhiều hơn 1 dòng:
    Lập một function
    tinh( lenh nvarchar(10), a1 int, a2 int, ..., a5)
    Bên trong function, code parse dòng lệnh (vd 'A3+A4') và tính ra là phải lấy a3 + a4, trả về kết quả

    Như vậy câu truy vấn sẽ là

    Select tinh(B1, A1, A2, A3, A4, A5) AS KetQuaTinh from A, B where A0 = B0

  4. #4
    Tham gia
    20-02-2006
    Bài viết
    27
    Like
    0
    Thanked 3 Times in 3 Posts

    Bạn sửa lại câu lệnh một chút

    Chính xác câu lệnh phải là:

    SELECT B1 from A, B where A.A0=B.B0

    Chúc thành công!

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •