D表的ee1字断试什么来头?有什么逻辑?
说清楚才能帮你写Query.

解决方案 »

  1.   

    D表的ee1字断是ee表结果的明细
      

  2.   

    BEGIN TRANCREATE TABLE TableA
    (
    Code VARCHAR(50), 
    aa INT,
    bb INT,
    cc INT,
    dd INT,
    ee INT)INSERT INTO TableA
    SELECT '0001', 15, 10, 12, 11, 48 UNION ALL
    SELECT '0002', 1, 1, 1, 1, 4 CREATE TABLE TableB
    (
    filed_name VARCHAR(50),
    names VARCHAR(50)
    )INSERT INTO TableB
    SELECT 'aa', '一号' UNION ALL
    SELECT 'bb', '二号' UNION ALL
    SELECT 'cc', '三号' UNION ALL
    SELECT 'dd', '四号' UNION ALL
    SELECT 'ee', '结果'CREATE TABLE TableC
    (
    filed_name VARCHAR(50),
    xexpr VARCHAR(50)
    )INSERT INTO TableC
    SELECT 'ee', 'ee=aa+bb+cc+dd'CREATE TABLE TableAA
    (
    Code VARCHAR(50),
    FieldName VARCHAR(50),
    Value INT
    )INSERT INTO TableAA
    SELECT code, FieldName = 'aa', Value = aa FROM TableA UNION ALL
    SELECT code, FieldName = 'bb', Value = bb FROM TableA UNION ALL
    SELECT code, FieldName = 'cc', Value = cc FROM TableA UNION ALL
    SELECT code, FieldName = 'dd', Value = dd FROM TableA UNION ALL
    SELECT code, FieldName = 'ee', Value = ee FROM TableA GO
    CREATE FUNCTION ReplaceStr(@xexpr VARCHAR(50), @code VARCHAR(50) = '')
    RETURNS VARCHAR(50)
    AS
    BEGINDECLARE @s VARCHAR(50)SET @s = @xexpr
    SELECT @s = REPLACE(@s, filed_name, names + ':' + CAST(aa.Value AS VARCHAR(50)))
    FROM TableB b
    INNER JOIN TableAA aa ON aa.FieldName = b.filed_name
    WHERE code = @codeRETURN @sEND
    GOSELECT dbo.ReplaceStr(xexpr, code)
    FROM TableA a 
    CROSS JOIN TableC c GO
    ROLLBACK